第一次更新(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存在及查找的方法
- cookie保存在系統中的時候是以“cookie名1=cookie值;cookie名2=cookie值”這樣的方式來保存的。
- document.cookie是返回包含所有cookie的字符串。
document.cookie.indexOf(c_name + “=”)是取得這個cookie名在整個cookie中的位置。【加”=”號:取cookie名加上等於號的位置,比方整個cookie是”user=tony;passwd=user123”,這時候查找名爲user的cookie的值的時候,是查找”user=”的位置,如果不要等於號,就會找到其他位置的”user”,比如後面密碼裏面也有user字符但並不是cookie名所在的位置。因爲cookie中cookie名都是唯一的,所以加上等於號就不會出錯了。】
c_start=c_start + c_name.length+1是用先前取得的位置加上cookie名的長度再加1,就是把位置確定在這個cookie名的”=”符號的後面。
- c_end=document.cookie.indexOf(“;”,c_start)是從上一步的位置開始查找,直到”;”的位置。
- 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了。