0

如果我在浏览器中导航到“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');
4

2 回答 2

0

PHP Session 变量是服务器端的。Cookie 仅存储会话 ID 以便检索正确的会话信息。

无论如何,假设:

sub.domain.com/session_test.php是别名localhost/session_test.php(它们指向同一个文件)?

您无法从另一个域中的一个域读取 cookie,即使它们解析到同一台服务器也是如此。但是,有一些方法可以弥补这一点。一种方法是将 cookie 会话 ID 作为 GET 参数传递,尽管这不是很安全。

另一种方法是将会话 ID 存储在本地(在文本文件或数据库中)并稍后检索它。

于 2013-11-04T19:31:46.870 回答
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');

你的代码没问题。

于 2013-11-04T19:26:45.137 回答