与localhost通信时会话不起作用

时间:2013-11-04 19:16:42

标签: php session http-headers

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

2 个答案:

答案 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.phplocalhost/session_test.php的别名(他们指向同一个文件)?

您无法从另一个域中的某个域读取Cookie,即使它们已解析为同一服务器。但是,有办法解决这个问题。一种方法是将cookie会话ID作为GET参数传递,尽管这不是很安全。

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