我正在执行一个会话开始,其中必须存在 Keep Me Connected 字段,并且用户按下复选框并发送数据,他的会话保持启动 3 天,否则它只会持续天。我正在通过以下方式进行操作:
<input name="sesion" type="checkbox" id="signed-in"/>
<label for="signed-in">Mantenerme Conectado</label>
if(!empty($_POST['sesion'])){
ini_set('session.cookie_lifetime', time() + (60*60*72));
} else {
ini_set('session.cookie_lifetime', time() + (60*60*24));
}
抛出我的问题是:
Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in line 17
现在我不知道是不是因为在那之前我声明了 session_start,我真的不知道。或者,如果有更好的方法让我保持登录状态,我将非常感谢您的帮助。谢谢
您正在制作一组配置指令。您需要做的是设置会话cookie 。为此,您可以使用session_set_cookie_params()其中第一个参数是生存时间。
在继续之前,请注意两点:
time() + (60*60*24)
会给你一个活到 2066年的时间(在写答案的时候)。尝试这样的事情:
附带说明一下,如果已经创建了会话,则session_set_cookie_params()不会设置生存时间。因此,如果在选择并发送Keep me logged in之前已启动会话,则生存时间更改不会生效。您必须在提交此表单之前不登录,或者删除当前会话并使用新的会话生命周期数据重新创建一个新会话。
编辑
如果你有一个外部文件来启动会话,你只需要稍微修改一下方法。
登录会执行默认的生存时间(ttl)...
...如果新会话被授权,则设置新的ttl。