php – 正确使用session_set_cookie_params
我正在尝试使用“记住我”功能实现登录系统.这是我的登录页面:
http://pastebin.com/q6iK0Mgy.在此我尝试使用session_set_cookie_params()扩展会话cookie(PHPSESSIONID)到期.但它不起作用.
代码中的相关部分:在此处执行内部if()循环,但session_set_cookie_params(‘3600’)无效.我正在调用session_name(),因为它应该是session_set_cookie_params()的一个要求(根据php手册中的一条评论) if ( isset($_POST["submit"]) ) { session_name() ; echo "calling before checked " ; if ( $_POST["remember"] == "on") { // extend expiration date of cookie session_set_cookie_params('3600'); echo "<br/>calling after sessions_set_cookie_params" ; } } require_once("includes/session.php"); //session start ?> 我希望我能够解释我想做什么.基本上我试图做的是延长session_cookie的到期时间.我完全错了吗?还有另一种方法可以达到同样的目的吗? 谢谢 解决方法
从来没有太老的答案权利?
所以,PHP是愚蠢的.如同,它不会做你认为有意义的事情. session_set_cookie_param在您调用session_start的确切时刻之前不会执行任何操作.因此,如果您在调用会话开始后设置cookie参数,则为时已晚.如果您设置cookie参数但不调用session_start,则不会发生任何事情. session_start也是一个有趣的野兽.它只会在第一次调用cookie时读取cookie数据,除非….你强制它写入,或者没有cookie开始.因此,如果没有cookie,它会写入cookie数据,客户端会保存您的会话.好极了!但是当cookie已经存在时,我们如何强制它写入,从而更新我们新的到期日? 因此,如果客户端上已存在cookie,则忽略所有session_set_cookie_param调用会产生这种奇怪的效果.更好的是,如果你明确地调用setcookie(session_name(),blah blah blah),php将会STILL不发出cookie. 所以,让我们强制php发出一个cookie. 选项1 这可以通过调用session_id来实现唯一不会破坏现有会话的值. http://php.net/session_id的文件说明了这一点
session_id($_COOKIE[session_name()]); 所以无论如何早上6点,我还没有睡觉,如果不是几年前你可能想出这几个月,但是到底怎么样,也许我会在我生命的2或3个小时内拯救别人,我永远不会回来.哈哈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |