我试图通过AJAX请求保留会话。简单地调用session_start()
不是选取现有会话,而是创建一个新的会话ID。我的解决方案是通过会话ID通过AJAX调用PHP,但是这导致了以下错误:我的会话中有下划线ID
Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in ...
我相信这是因为当前会话ID中包含下划线,但会话ID正在通过致电session_id()
获取,那么它如何包含坏字符?
我的意思简单的例子:页面上
的JavaScript(使用jQuery)
var sessID = "<?php echo session_id(); ?>"; //sessID contains underscore characters
$.get('/path/to/script.php',{sid:sessID}, function(data) {
//do something
});
的script.php
<?php
session_id($_GET['sid']);
session_start();
echo $_SESSION['some_key'];
?>
所以我想目前解析会话ID在第一页上,并在尝试使用它之前替换其中的任何不良字符,但我不确定这是正确的做法还是需要在别处寻找解决方案。
如果'在session_start()'是不是在AJAX调用保存您的会话,你有问题其他地方。你是否在某处重新生成会话ID? – 2012-02-14 13:45:27
这是可能的。会话实际上是在Drupal模块中设置的,但JS与JS交互的PHP不是Drupal站点的一部分。 – shanethehat 2012-02-14 13:52:00
你真的应该更详细地调查cookie问题,而不是打开传输会话ID的新通道。从像萤火虫或小提琴手那样的东西开始,检查服务器响应中的cookie标头。 – VolkerK 2012-02-14 14:00:36