首次访问时未将PHP会话保存在浏览器中
[更新代码] 我有一个奇怪的会话问题,似乎只有在有人第一次访问页面时才会出现 如果转到下一页并单击“下一步”,您可能会发现您被发送到一个未找到的页面。如果您随后返回链接并再次按“下一步”,则此功能将正常工作 奇怪的是,如果你清除cookie和所有其他浏览器相关的历史记录,问题似乎不会再次发生。如果您尝试使用其他浏览器,也不会出现这种情况 我已经查看了Chrome上的Resources选项卡,可以看到会话最初并没有保存,但正在进行第二次尝试 这是代码的相关部分。因此,在脚本的开头:首次访问时未将PHP会话保存在浏览器中,php,session,smarty,session-cookies,Php,Session,Smarty,Session Cookies,[更新代码] 我有一个奇怪的会话问题,似乎只有在有人第一次访问页面时才会出现 如果转到下一页并单击“下一步”,您可能会发现您被发送到一个未找到的页面。如果您随后返回链接并再次按“下一步”,则此功能将正常工作 奇怪的是,如果你清除cookie和所有其他浏览器相关的历史记录,问题似乎不会再次发生。如果您尝试使用其他浏览器,也不会出现这种情况 我已经查看了Chrome上的Resources选项卡,可以看到会话最初并没有保存,但正在进行第二次尝试 这是代码的相关部分。因此,在脚本的开头: // set
// set the http headers
header("Content-Type: text/html;charset=utf-8");
header("X-XSS-Protection: 1; mode=block");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("X-Content-Type-Options: nosniff");
header("X-Permitted-Cross-Domain-Policies: master-only");
session_set_cookie_params ( $lifetime = 0, $path = "/", $domain= "pulse.gd", $secure = TRUE, $httponly = true );
// set-up the session handler
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
register_shutdown_function("sess_shutdown");
然后在正在调用的函数的顶部:
session_start();
然后,当它构建了要传递到下一步的数组时
// store the step array in the session object
$_SESSION['stepArray'] = serialize($stepArray);
此时它(应该)显示下一页。这是由Smarty处理的
有人有什么建议吗
感谢您重新编写代码: 我很确定你不需要一半的头,而且大多数会话设置都是无效的语法
// set the http headers
header("Content-Type: text/html;charset=utf-8");
//header("X-XSS-Protection: 1; mode=block");
//header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("X-Content-Type-Options: nosniff");
//header("X-Permitted-Cross-Domain-Policies: master-only");
session_set_cookie_params( 0, "/", "pulse.gd", TRUE, true );
/*** What is the intended purpose of these below functions? **/
// I'm pretty sure you don't need to set these.
// UNLESS they've been set in place by Smarty, in which case leave them.
// set-up the session handler
// session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
// register_shutdown_function("sess_shutdown");
错误很可能在您的sess\u open
函数中,我真的怀疑您是否真的需要它
- 我还想说,如果你的页面有5k行代码,那你就错了李>
- 不要将
放在函数的顶部,它需要放在发送到浏览器的页面的顶部session\u start
- 并进行了研究和实现
- 回复:
plase请检查此对话框:session\u set\u save\u handler
你提到的链接不起作用。我的答案已更新。几点。我没有说5k行代码在一个文件中。。。我有PHP错误日志记录,这没有帮助。首先调用会话启动。您注释掉的行肯定是需要的,因为它们实现了将会话存储在数据库中而不是服务器上。我可以看到在数据库中创建的会话,但似乎正在生成一个新的PHPID,我可能应该在一开始就说明这一点。我会看着标题想,谢谢!