[代码更新]
我有一个奇怪的会话问题,似乎只有在有人访问该页面时才会出现。
如果您转到以下页面并单击下一步,您可能会发现您被发送到找不到页面的页面。如果您返回链接并再次按下一步,则此时它将起作用。
奇怪的是,如果您清除了Cookie和所有其他与浏览器相关的历史记录,则问题似乎不再发生。如果您尝试使用其他浏览器,也不会这样做。
我已经看过Chrome上的“资源”标签,可以看到会话最初没有保存,但是第二次尝试。
这是代码的相关部分。所以在脚本的开头:
// 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处理。
有人有任何建议吗?
由于
答案 0 :(得分:0)
重写代码:
我很确定你不需要这些标题的一半,并且大多数会话设置都是无效的语法。
// 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_open
函数中,我真的怀疑您确实需要它。
session_start
放在需要位于发送到浏览器页面顶部的函数的顶部。session_set_save_handler
请检查此anwser:https://stackoverflow.com/a/13963907/3536236