柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

PHP改session为cookies,实现记住密码永久登录的方法

2020-08-04 admin php  1413

一般web程序使用session来保持登录,session是记录在服务器上的,所以关闭网页,或长时间不操作,就需要重新登录。

因有客户需要使用记住密码功能,而且对安全性并不很重视,为了适应原程序尽量少改动,使用了cookies替代session记住密码,在修改过程中要注意以下几点:

首先要解决,如何使用cookies保存数组。因原来session是保存用户数据数组,而cookie只能保存字符串,因此,需用下面的方法保存数组:

$group = $is_true['用户组'];
if(session_status() == 1){session_start();}
$_SESSION['userinfo'] = ['username' => $username,'group' => $group];
setcookie("userinfo[username]", $username, time()+3600000,'/');
setcookie("userinfo[group]", $group, time()+3600000,'/');

其次,在保存cookie时,一定要指定根目录为路径,否则会出现跳转页面cookie消失的问题。比如上面例子中的/就是根目录。cookie的失效时间,可根据需要设置,单位为秒,比如上面代码中设置为一个月。

第三,在退出登录时,需要清除session的同时,删除cookie。删除cookie有两种方法,一种是设置失效时间为目前时间-1,另一种是直接清除变量,方法如下:

if(isset($_GET['action'])){//注销登录
if($_GET['action'] == "logout"){
    if(session_status() == 1){session_start();}
    session_unset();
                session_destroy();//清除服务器的sesion文件
if(isset($_COOKIE['userinfo'])){
        setcookie("userinfo[username]", null, time()-1,'/');//清理cookie
        setcookie("userinfo[group]", null, time()-1,'/');
}
exit; 
}
}

这里需要强调的是,清除cookie也一定要指定目录为根目录,并且,如果是数组,一定要将数组成员一个一个清除,不能直接清除数组,因为cookie不支持数组,直接清理数组是无效的。

判断登录可用如下方法:

    //判断用户是否登录及登录类型
    public function is_login()
    {
if(empty($_COOKIE["userinfo"])){
return '未登录';//未登录
}else{
    return $_COOKIE['userinfo']['group'];//返回用户组
}
    }

这种方法安全上有很大问题,因为cookie没有加密,所以用户容易伪造。比较可行的方法是,将用户名等信息和到期时间,用md5等加密后,保存在数据库用户信息中。打开首页时,读取用户cookie加密数据并和数据库中的比对,确定是否登录。


文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!