我想做一个‘一星期内自动登录’功能,
后端登录代码如下:`
class loginController extends corelibController
{
public function login() { if($_POST['autoLogin']==1) { ini_set('session.gc_maxlifetime', "604800"); // 秒 ini_set("session.cookie_lifetime","604800"); // 秒 } session_start(); if(strtolower($_SESSION['vCode'])!=strtolower($_POST['vCode'])) { echo 'vCode_error'; exit(0); } $model=new mongoModel('wind','users'); $name=$model->findOne('name',$_POST['username']); if(!empty($name)) { if($name['password']==$_POST['password']) { $_SESSION['username']=$_POST['username']; echo 'success'; } else echo 'password_error'; } else { echo 'user_error'; } }
}`
通过前端传来的‘autoLogin’值来判断用户是否选择了‘一周内自动登录’这个checkbox,如果选择,则更改session和保存了sessionid的cookie的最大保存时间为1个星期。但是我发现这样也不行,cookie的有效期依然为结束会话时销毁,但是我把: ini_set('session.gc_maxlifetime', "604800");
ini_set("session.cookie_lifetime","604800");
这两段代码放到项目入口文件里,cookie的有效期成功到了一个星期以后,这是为啥呢?
新手求问。
这就涉及到了一个作用域的问题,要不你试试在设置
cookie
之前设置最大保存时间?
http://php.net/manual/en/func...
只是在该脚本里临时生效的,脚本运行结束后就恢复。
客户端和服务器默认是通过sesssion_id握手的,你要保证session_id存在于客户端和服务器,一旦任何一方有做更改,再次访问就相当于又重新握手,之前握手的数据是不能直接访问到的。