圖書館佔座系統(六)


第一次更新(2018.2. 14:58)

今天一上午搞定了cookie,本來我把cookie寫在了JavaScript部分,後來感覺不太對,因爲不能確定是否是正確的用戶名和密碼就把他寫進了cookie,所以我把它放在了php文件內
JavaScript部分代碼如下:

function setcookie(name,value,day)//注意這個name爲cookic的你name,value爲cookic的value,如果要存多個信息,請多次調用鈣函數
        {
            var date = new Date();//新建獲取日期對象

            date.setDate(date.getDate()+day);//設置在day天后過期

            document.cookie = name+'='+value+';expires='+date;  //注意拼接字符串       
            }
        function getcookie(name)//設置取出cookie
        {
            var arr = document.cookie.split('; ');//以  ;和 空格來分割字符串
            var i = 0;//設置循環變量
            for (i=0;i<=arr.length;i++)
                {
                    var arr2=arr[i].split('=');
                    if (arr2[0]==name)
                        {

                            return arr2[1];
                        }
                }
            return " ";

        }
    ///////////////////////////////////

        //////////////////////調用cookie函數,並將用戶名填入//////////////////////////
    window.οnlοad=function()//頁面載入時調用函數
    {

        var name = $('input[name="name"]').val();//獲取輸入框中的name值
        var password = $('input[name="password"]').val();//獲取輸入框中的password

        function cook(){
        setcookie('username',name,'1');//調用cookic函數,寫入值
        setcookie('passWord',password,'1');//調用cookic函數,寫入值
        //alert(document.cookie);
        name.value = getcookie('username');//設置讓用戶名自動填充
        password.value = getcookie('passWord');//設置讓密碼是自動填充
    }}

php部分代碼如下:

name=$_POST['name'];
$password=$_POST['password'];

先獲取傳入的用戶名和密碼

setcook($name,$password);

當用戶名和密碼正確是調用設置cookie的函數,並把名字和密碼傳進去

function setcook($name,$password){
setcookie("name",$name);//設置cookic名字爲name,值爲$name,過期時間爲關閉瀏覽器就過期
setcookie("password",$password);//設置cookic名字爲password,值爲$password,過期時間爲關閉瀏覽器就過期,這是默認的,如果想在1個小時後過期,最後加上time()+3600 即可。

}

這是設置cookie的的代碼,中間有個小插曲,因爲是一個函數,全局變量和局部變量的問題,所以 我把用戶名和密碼傳進去,而不能直接用,我沒有設置cookie的過期時間,因爲默認是關閉瀏覽器就失效,我需要這樣的效果。

代碼:

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=")
  if (c_start!=-1)
    { 
    c_start=c_start + c_name.length+1 
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    } 
  }

 return "";

這是判斷cookie存在及查找的方法

  1. cookie保存在系統中的時候是以“cookie名1=cookie值;cookie名2=cookie值”這樣的方式來保存的。
  2. document.cookie是返回包含所有cookie的字符串。
  3. document.cookie.indexOf(c_name + “=”)是取得這個cookie名在整個cookie中的位置。【加”=”號:取cookie名加上等於號的位置,比方整個cookie是”user=tony;passwd=user123”,這時候查找名爲user的cookie的值的時候,是查找”user=”的位置,如果不要等於號,就會找到其他位置的”user”,比如後面密碼裏面也有user字符但並不是cookie名所在的位置。因爲cookie中cookie名都是唯一的,所以加上等於號就不會出錯了。】

  4. c_start=c_start + c_name.length+1是用先前取得的位置加上cookie名的長度再加1,就是把位置確定在這個cookie名的”=”符號的後面。

  5. c_end=document.cookie.indexOf(“;”,c_start)是從上一步的位置開始查找,直到”;”的位置。
  6. document.cookie.substring(c_start,c_end))就是取該cookie名的等號後面到分號前面的字符串,即對應的cookie值。

第二次更新(2018.8.6 16:24)

因爲cookie設置爲關掉網頁就會失效,而且cookie會被同名覆蓋,所以我在一樓直接檢查cookie黨的長度來確認是登錄,
代碼如下

cheakccook();
        /***************************************檢查的cookie是否存在*****************************************/
        function cheakccook(){
            {   
                if(document.cookie.length==0)//判斷cookie爲空,
                {   
                    alert("請重新登錄");
                    window.location.href='登錄.html';//在當前頁面打開
            }


            }
        }

因爲剛開始不知道我的cookie會被覆蓋,所以開始我想用window.close
來關掉窗口以達到清空cookie的目的,可是不知爲啥不成功,所以我又換了一種方法,設置當前cookie過期時間爲-1。在我寫代碼的時候,發現設置時間需要當前cookie的value值,但是我的cookie是在php裏面設置的,所以不好實現,當我調試代碼的時候,突然發現cookie會覆蓋,那就不用再去清除cookie了,因爲我的設置cookie的過期時間和我所需要的cookie,保證了純淨性,也就是說這個cookie,只能是當前用戶的cookie,這就很好把所有功能連接起來了。所以就不需要清除cookie了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章