第一次更新(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.onload=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了。