我試圖通過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