【发布时间】:2016-06-21 13:18:00
【问题描述】:
当我进行 AJAX 调用时,我需要等待它的响应才能显示给用户。
function update() {
if (HttpReq.readyState == 4) {
if (HttpReq.status == 200) {
var div = document.getElementById('divAjax');
div.innerHTML = HttpReq.responseText;
} else {
alert("Error: " + HttpReq.statusText);
}
}
}
HttpReq = new XMLHttpRequest();
HttpReq.onreadystatechange = update;
HttpReq.open('GET', 'some_url.php', true);
HttpReq.send(null);
但是,如果用户在响应之前按 F5 刷新屏幕,我会丢失我的 $_SESSION 数据,这会自动将用户注销。
这是一种常见的行为,还是我的代码有问题? (我使用的是安全会话加载器,也许问题就在那里。如果需要,我可以发布代码。)
问题并不完全在于 F5,它是在某些特殊情况下发生的事情,这只是我找到的重现该行为的最简单方法。
代码:
// index.php
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_save_path('/var/www/html/plantas/sessions');
sec_session_start(); // this line called in every other .php file
// functions.php
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../html/plantas/error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(true);
}
// every other .php file begin with
include_once '../../includes/db_connect.php';
include_once '../../includes/functions.php';
sec_session_start();
解决方案
剪掉
session_regenerate_id(true);
来自functions.php并在之后插入
// index.php
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_save_path('/var/www/html/plantas/sessions');
sec_session_start(); // this line called in every other .php file
【问题讨论】:
-
是的,最好显示所有涉及的代码。
-
some_url.php 检查此请求中的内容
-
在正常情况下,会话仅在您关闭浏览器时关闭,除非您检查后退按钮和刷新,这似乎不适用于您。所以是的,分享涉及的代码会有所帮助。
-
添加了一些代码。 @YehiaAwad,我有几十个 php 文件,其中任何一个都可能给出类似的错误。
-
@akmsharma 实际上,我没有返回按钮或刷新的代码。
标签: javascript php ajax session