日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

PHP网站后台使用ukey登录

發(fā)布時(shí)間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 PHP网站后台使用ukey登录 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因?yàn)轫?xiàng)目需要,所以就去研究了這個(gè)后臺(tái)用ukey登錄,也就是必須使用u盤才能進(jìn)行登錄網(wǎng)站后臺(tái)

下面先放一個(gè)淘寶的鏈接,這個(gè)東西就是在他哪買的

https://item.taobao.com/item.htm?_u=81p7of6sd7c7&id=42619542116

資料下載頁(yè)面

http://www.dgyzt.com/D8_Download.html

php需要下載的資料如下

下載這三個(gè)即可里面有對(duì)應(yīng)的文檔跟需要的工具跟代碼列子

解壓出來(lái)會(huì)得到

里面相關(guān)的工具跟代碼列子對(duì)應(yīng)各種語(yǔ)言

拿到ukey如何實(shí)現(xiàn)后臺(tái)登錄

1、打開(kāi)開(kāi)發(fā)工具去生成一個(gè)鎖的種子ID

這是操作步驟,必須要在插入ukey的時(shí)候進(jìn)行。

2、找到對(duì)應(yīng)的代碼列子可以直接復(fù)制他們的代碼讓他自動(dòng)讀取

讀取的內(nèi)容包括你設(shè)置好的賬號(hào)密碼等等,寫入賬戶密碼的工具如下

代碼片段,我用到只有自動(dòng)讀取KeyID,也就是上面設(shè)置的鎖ID

這里是相關(guān)代碼,可以直接復(fù)制過(guò)去用,代碼在例子里面都能找到,如果無(wú)法使用也可以去咨詢客服,他們會(huì)有技術(shù)人員幫你,這點(diǎn)還是很不錯(cuò)的。

<SCRIPT LANGUAGE=javascript>

var bConnect=0;
 
function load()
{
    if(frmlogin.KeyID.value!="")return ;//如果已自動(dòng)登錄則退出
     //如果是IE10及以下瀏覽器,則使用AVCTIVEX控件的方式
    if(navigator.userAgent.indexOf("MSIE")>0 && !navigator.userAgent.indexOf("opera") > -1) 
    {
        setTimeout( Handle_IE10, 1000);
        return ;
    }
    try
    {
        var s_pnp=new SoftKey3W();
         s_pnp.Socket_UK.onopen = function() 
        {
               bConnect=1;//代表已經(jīng)連接,用于判斷是否安裝了客戶端服務(wù)
               setTimeout( login_onclick, 500);
        } 
        
        //在使用事件插撥時(shí),注意,一定不要關(guān)掉Sockey,否則無(wú)法監(jiān)測(cè)事件插撥
        s_pnp.Socket_UK.onmessage =function got_packet(Msg) 
        {
           
        } 
        
        s_pnp.Socket_UK.onclose = function()
        {
            
        }
        setTimeout( err_Connect, 3000);//如果在一定時(shí)間內(nèi)還沒(méi)有連接成功,就提示要安裝服務(wù)
   }
   catch(e)  
   {  
        alert(e.name + ": " + e.message);
        return false;
    }  
}


var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');

function toHex( n ) {

        var result = ''
        var start = true;

        for ( var i=32; i>0; ) {
                i -= 4;
                var digit = ( n >> i ) & 0xf;

                if (!start || digit != 0) {
                        start = false;
                        result += digitArray[digit];
                }
        }

        return ( result == '' ? '0' : result );
}

function login_onclick() 
{
    var url = window.location.host;
     //判斷是否安裝了服務(wù)程序,如果沒(méi)有安裝提示用戶安裝
     if(bConnect==0)
     {
        window.alert ("未能連接服務(wù)程序,請(qǐng)確定服務(wù)程序是否安裝。請(qǐng)?jiān)L問(wèn)“"+url+"/SetUp.zip”下載驅(qū)動(dòng)安裝即可,復(fù)制鏈接即可下載!");return false;
     }
         var DevicePath,ret,n,mylen,ID_1,ID_2;
    try
    {
            
         //由于是使用事件消息的方式與服務(wù)程序進(jìn)行通訊,
            //好處是不用安裝插件,不分系統(tǒng)及版本,控件也不會(huì)被攔截,同時(shí)安裝服務(wù)程序后,可以立即使用,不用重啟瀏覽器
            //不好的地方,就是但寫代碼會(huì)復(fù)雜一些
            var s_simnew1=new SoftKey3W(); //創(chuàng)建UK類
            
            s_simnew1.Socket_UK.onopen = function() {
                  s_simnew1.ResetOrder();//這里調(diào)用ResetOrder將計(jì)數(shù)清零,這樣,消息處理處就會(huì)收到0序號(hào)的消息,通過(guò)計(jì)數(shù)及序號(hào)的方式,從而生產(chǎn)流程
            } 

           
         //寫代碼時(shí)一定要注意,每調(diào)用我們的一個(gè)UKEY函數(shù),就會(huì)生產(chǎn)一個(gè)計(jì)數(shù),即增加一個(gè)序號(hào),較好的邏輯是一個(gè)序號(hào)的消息處理中,只調(diào)用我們一個(gè)UKEY的函數(shù)
        s_simnew1.Socket_UK.onmessage =function got_packet(Msg) 
        {
            var UK_Data = JSON.parse(Msg.data);
            // alert(Msg.data);
            if(UK_Data.type!="Process")return ;//如果不是流程處理消息,則跳過(guò)
            /**
             * 自動(dòng)獲取uk設(shè)置的賬號(hào)密碼跟ukeyid
             * 要求只獲取ukeyid所以沒(méi)用上,后續(xù)需要對(duì)換一下switch即可
             */
            /*
            switch(UK_Data.order) 
            {
                case 0:
                    {
                        s_simnew1.FindPort(0);//發(fā)送命令取UK的路徑
                    }
                    break;//!!!!!重要提示,如果在調(diào)試中,發(fā)現(xiàn)代碼不對(duì),一定要注意,是不是少了break,這個(gè)少了是很常見(jiàn)的錯(cuò)誤
                 case 1:
                    {
                        if( UK_Data.LastError!=0){window.alert ( "未發(fā)現(xiàn)加密鎖,請(qǐng)插入加密鎖");s_simnew1.Socket_UK.close();return false;} 
                        DevicePath=UK_Data.return_value;//獲得返回的UK的路徑
                        //獲取設(shè)置在鎖中的用戶名
                        //先從地址0讀取字符串的長(zhǎng)度,使用默認(rèn)的讀密碼"FFFFFFFF","FFFFFFFF"
                        s_simnew1.YReadEx(0,1,"ffffffff","ffffffff",DevicePath);//發(fā)送命令取UK地址0的數(shù)據(jù)
                        
                    }
                    break;
                case 2:
                    {
                        if( UK_Data.LastError!=0){ window.alert("讀數(shù)據(jù)時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        s_simnew1.GetBuf(0);//發(fā)送命令從數(shù)據(jù)緩沖區(qū)中數(shù)據(jù)
                    }
                    break;
                case 3:
                    {
                        if( UK_Data.LastError!=0){ window.alert("調(diào)用GetBuf時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        mylen=UK_Data.return_value;//獲得返回的數(shù)據(jù)緩沖區(qū)中數(shù)據(jù)
                        
                        //再?gòu)牡刂?讀取相應(yīng)的長(zhǎng)度的字符串,,使用默認(rèn)的讀密碼"FFFFFFFF","FFFFFFFF"
                        s_simnew1.YReadString(1,mylen, "ffffffff", "ffffffff", DevicePath);//發(fā)送命令從UK地址1中取字符串
                    }
                    break;
                case 4:
                    {
                        if( UK_Data.LastError!=0){ window.alert("讀取字符串時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        frmlogin.username.value=UK_Data.return_value;//獲得返回的UK地址1的字符串
                        
                        //獲到設(shè)置在鎖中的用戶密碼,
                        //先從地址20讀取字符串的長(zhǎng)度,使用默認(rèn)的讀密碼"FFFFFFFF","FFFFFFFF"
                        s_simnew1.YReadEx(20,1,"ffffffff","ffffffff",DevicePath);//發(fā)送命令取UK地址20的數(shù)據(jù)
                         
                    }
                    break;
                case 5:
                    {
                        if( UK_Data.LastError!=0){ window.alert("讀數(shù)據(jù)時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        s_simnew1.GetBuf(0);//發(fā)送命令從數(shù)據(jù)緩沖區(qū)中數(shù)據(jù)
                    }
                    break;
                 case 6:
                    {
                        if( UK_Data.LastError!=0){ window.alert("調(diào)用GetBuf時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        mylen=UK_Data.return_value;//獲得返回的數(shù)據(jù)緩沖區(qū)中數(shù)據(jù)
                        
                        //再?gòu)牡刂?1讀取相應(yīng)的長(zhǎng)度的字符串,,使用默認(rèn)的讀密碼"FFFFFFFF","FFFFFFFF"
                        s_simnew1.YReadString(21,mylen,"ffffffff", "ffffffff", DevicePath);//發(fā)送命令從UK地址21中取字符串
                        
                    }
                    break;
                 case 7:
                    {
                        if( UK_Data.LastError!=0){ window.alert("讀取字符串時(shí)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        frmlogin.password.value=UK_Data.return_value;//獲得返回的UK地址21的字符串
                         
                        s_simnew1.GetID_1(DevicePath); //發(fā)送命令取ID_1
                    }
                    break;
                case 8:
                    {
                        if( UK_Data.LastError!=0){ window.alert("返回ID號(hào)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        ID_1=UK_Data.return_value;//獲得返回的UK的ID_1
                        s_simnew1.GetID_2(DevicePath); //發(fā)送命令取ID_2
                    }
                    break;
                 case 9:
                    {
                        if( UK_Data.LastError!=0){ window.alert("取得ID錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                         ID_2=UK_Data.return_value;//獲得返回的UK的ID_2
                         
                         frmlogin.KeyID.value=toHex(ID_1)+toHex(ID_2);
                         frmlogin.ukey.value=toHex(ID_1)+toHex(ID_2);
                         frmlogin.KeyID.value=frmlogin.KeyID.value.substr(0,6)+'****'+frmlogin.KeyID.value.substr(10);
                         //!!!!!注意,這里一定要主動(dòng)提交,不能用提交類型的按鈕,否則無(wú)法完全處理所有的消息
                         // frmlogin.submit ();
                         
                         //所有工作處理完成后,關(guān)掉Socket
                         s_simnew1.Socket_UK.close();
                    }
                    break;
            }
            */
               /**
                * 自動(dòng)獲取ukeyid
                * 要求只獲取ukeyid所以沒(méi)用上,如果需要自動(dòng)獲取ukey設(shè)置好的賬號(hào)密碼對(duì)換一下switch即可
                */
               switch(UK_Data.order) 
            {
                case 0:
                    {
                        s_simnew1.FindPort(0);//發(fā)送命令取UK的路徑
                    }
                    break;//!!!!!重要提示,如果在調(diào)試中,發(fā)現(xiàn)代碼不對(duì),一定要注意,是不是少了break,這個(gè)少了是很常見(jiàn)的錯(cuò)誤
                case 1:
                    {
                        if( UK_Data.LastError!=0){window.alert ( "未發(fā)現(xiàn)加密鎖,請(qǐng)插入加密鎖");s_simnew1.Socket_UK.close();return false;} 
                        DevicePath=UK_Data.return_value;//獲得返回的UK的路徑
                        s_simnew1.GetID_1(DevicePath); //發(fā)送命令取ID_1
                    }
                    break;
                case 2:
                    {
                        if( UK_Data.LastError!=0){ window.alert("返回ID號(hào)錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                        ID_1=UK_Data.return_value;//獲得返回的UK的ID_1
                        s_simnew1.GetID_2(DevicePath); //發(fā)送命令取ID_2
                    }
                    break;
                 case 3:
                    {
                        if( UK_Data.LastError!=0){ window.alert("取得ID錯(cuò)誤,錯(cuò)誤碼為:"+UK_Data.LastError.toString());s_simnew1.Socket_UK.close();return false;} 
                         ID_2=UK_Data.return_value;//獲得返回的UK的ID_2
                         
                         frmlogin.KeyID.value=toHex(ID_1)+toHex(ID_2);
                         frmlogin.ukey.value=toHex(ID_1)+toHex(ID_2);
                         frmlogin.KeyID.value=frmlogin.KeyID.value.substr(0,6)+'****'+frmlogin.KeyID.value.substr(10);
                         
                         //!!!!!注意,這里一定要主動(dòng)提交,不能用提交類型的按鈕,否則無(wú)法完全處理所有的消息
                         // frmlogin.submit ();
                         
                         //所有工作處理完成后,關(guān)掉Socket
                         s_simnew1.Socket_UK.close();
                    }
                    break;
            }
           
        } 
        s_simnew1.Socket_UK.onclose = function(){

        }
        return true;
    }
    catch (e) 
    {
        alert(e.name + ": " + e.message);
    }
}

function err_Connect() 
{
    var url = window.location.host;
    if(bConnect==1)return ;
    alert("未能連接服務(wù)程序,請(qǐng)確定服務(wù)程序是否安裝。請(qǐng)?jiān)L問(wèn)“"+url+"/SetUp.zip”下載驅(qū)動(dòng)安裝即可,復(fù)制鏈接即可下載!");
}

function Handle_IE10() 
{
     try
     {
        var DevicePath,mylen,ret;
        var s_simnew1;
        //創(chuàng)建或控件

        s_simnew1=new ActiveXObject("Syunew3A.s_simnew3");

        DevicePath = s_simnew1.FindPort(0);//'來(lái)查找加密鎖,0是指查找默認(rèn)端口的鎖
        if( s_simnew1.LastError!= 0 )
        {
            window.alert ( "未發(fā)現(xiàn)加密鎖,請(qǐng)插入加密鎖");return false;
        }
        else
        {
        
            //獲取鎖的ID
            frmlogin.KeyID.value=toHex(s_simnew1.GetID_1(DevicePath))+toHex(s_simnew1.GetID_2(DevicePath));
            if( s_simnew1.LastError!= 0 )
            {
                window.alert( "獲取ID錯(cuò)誤,錯(cuò)誤碼是"+s_simnew1.LastError.toString());
                return false;
            }
            // frmlogin.submit ();
            return true;
        }
      }

     catch(e)  
      {  
                alert(e.name + ": " + e.message+"。可能是沒(méi)有安裝相應(yīng)的控件或插件");
                return false;
      }  

}
</SCRIPT>

相關(guān)代碼

此處是放一個(gè)自動(dòng)安裝包到你域名根目錄下,當(dāng)他提示服務(wù)沒(méi)有安裝的時(shí)候讓他下載安裝,就不用每次都來(lái)煩你為什么不能登錄,安裝包下面會(huì)有說(shuō)明你選一個(gè)改一下名字就可以了放到網(wǎng)站根目錄即可

上面的代碼片段有一個(gè)switch是可以獲取設(shè)置好的賬戶密碼跟KeyID的,已標(biāo)注出來(lái),但是因?yàn)橛貌簧暇妥⑨尩舸a了,另外一個(gè)是只獲取KeyID。

form表單代碼如下

<form action="?op=login" id="frmlogin" name="main" method="POST" onSubmit="return check_data()">
<div id="login_box">
    <div id="box_top"></div>
    <div id="login_area">
        <table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td height="20" colspan="2"></td>
            </tr>
            <tr>
                <td width="39%" height="30" align="right">用戶姓名:</td>
                <td width="61%"><input name="username" id="username" type="text" class="input" size="20" value=""></td>
            </tr>
            <tr>
                <td height="30" align="right">登錄密碼:</td>
                <td><input name="password" id="password" type="password" class="input" size="20"></td>
            </tr>
            <tr>
                <td height="30" align="right">uKey序號(hào):</td>
                <td><input name="KeyID" id="KeyID" type="text" class="input" size="20" value="" autocomplete="off"></td>
                <input type="hidden" name="ukey" id="ukey" value="">
            </tr>
            <tr>
                <td height="20" colspan="2"></td>
            </tr>
            <tr align="center">
                <td align="right"></td>
                <td align="left"><input type="submit" value="登錄系統(tǒng)" class="button"></td>
            </tr>
            <tr>
                <td colspan="2" height="40"></td>
            </tr>
            <tr>
                <td colspan="2" height="38" align="center"></td>
            </tr>
        </table>
    </div>
    <div id="box_bottom"></div>
</div>
</form>

View Code

還有個(gè)一個(gè)特別需要注意的點(diǎn)

這里必須要加載他的函數(shù),否則可能會(huì)無(wú)法自動(dòng)讀取,親身踩出來(lái)的坑

在此頁(yè)面還需要引用一個(gè)Syunew3.js文件,代碼列子里面能找到

3.進(jìn)行測(cè)試

做好這些工作之后你就可以開(kāi)始進(jìn)行測(cè)試了,打開(kāi)你需要驗(yàn)證的登錄頁(yè)面,他應(yīng)該會(huì)提示你“未能連接服務(wù)程序,請(qǐng)確定服務(wù)程序是否安裝”,那么想就需要安裝一個(gè)程序

程序在這里一個(gè)是可以設(shè)置網(wǎng)址一個(gè)是不可以設(shè)置網(wǎng)址,可以設(shè)置網(wǎng)址的意思就是你插入ukey他會(huì)自動(dòng)打開(kāi)到你設(shè)置好的一個(gè)網(wǎng)址,怎么用里面有說(shuō)明。

然后安裝好程序再打開(kāi)之后,他會(huì)自動(dòng)獲取到你的KeyID了如下。

驗(yàn)證的時(shí)候你把你生成的KeyID,放到數(shù)據(jù)庫(kù),如何是需要對(duì)應(yīng)用戶,那么就在你用戶表多建一個(gè)字段存放,能自動(dòng)獲取到之后就剩下如何驗(yàn)證了。

如果上面自動(dòng)獲取的代碼實(shí)在不會(huì)可以去咨詢客服客服會(huì)教你的,里面還有更高級(jí)的代碼驗(yàn)證,需要的話可以去研究一下。

總結(jié)

以上是生活随笔為你收集整理的PHP网站后台使用ukey登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。