如果我在浏览器中导航到“sub.domain.com/session_test.php”,会话将保存并正常工作。我可以在页面刷新时看到所有会话。
但是,如果我从localhost中的javascript向同一个URL发出http post请求,则会话未被保存,因为我没有获得任何数据(“if”语句中的数据)。
为什么会发生这种情况?
session_start();
if(isset($_SESSION['u'])){
var_dump(ini_get('session.save_path'));
var_dump(ini_get('session.gc_maxlifetime'));
var_dump(ini_get('session.cookie_lifetime'));
echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
die();
}
$_SESSION['u'] = "34343gf";
die('end');
答案 0 :(得分:0)
我用一对名为index.php和index2.php的文件尝试你的代码。 会议正在进行中。 (Windows7,Wamp2.5,Apache2.22,php5.4)
我认为您对会话所在的/ tmp文件夹没有任何权限。
尝试使用php函数file_put_contents( ini_get('session.save_path')."/test-file.txt", 'Test file is OK');
将文件放入其中。
您的代码没问题。
答案 1 :(得分:0)
PHP Session变量是服务器端。 Cookie仅存储会话ID,以便检索正确的会话信息。
无论如何,假设:
sub.domain.com/session_test.php
是localhost/session_test.php
的别名(他们指向同一个文件)?
您无法从另一个域中的某个域读取Cookie,即使它们已解析为同一服务器。但是,有办法解决这个问题。一种方法是将cookie会话ID作为GET参数传递,尽管这不是很安全。
另一种方法是在本地(在文本文件或数据库中)存储会话ID,并在以后检索它。