我的開發環境是一個 VirtualBox Debian VM,在 Windows 上運行,帶有 Apache 和 PHP。我目前使用特定的本地 IP 192.168.33.10 在瀏覽器中訪問它。我創建了這兩個簡單的測驗腳本:
stest1.php:
<?php
session_start();
$_SESSION['session_temp_id'] = 12345;
echo session_id();
?>
<a href="stest2.php">go to two</a>
stest2.php:
<?php session_start();
echo 'Session Info:';
echo session_id();
var_dump($_SESSION);
phpinfo();
如果我通過http://192.168.33.10/stest1.php訪問它并導航到 stest2,會話將恢復并且我可以看到["session_temp_id"]=> int(12345)相同的會話 ID,因此它在直接使用 ip 時有效。
我將其設定為在本地使用特定域名,因此我已添加ServerName local.mydev.com到我的 apache VirtualHost 配置中,并且已添加192.168.33.10 local.mydev.com到 Windows 中的主機檔案中。當我訪問http://local.mydev.com/stest1.php時,我看到了正確的頁面加載,因此配置似乎正在運行。但是導航到 stest2 會給我一個不同的會話 ID,其中 $_SESSION 的陣列為空。
從 chrome 開發工具中,我可以看到為 local.mydev.com 創建的 cookie,其 id 從 stest1 持續到 stest2,但似乎由于某種原因 session_start() 無法從該 cookie 中檢索會話。
這是我通過網路從 php_info 獲取的會話設定:
session
Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 0 0
session.lazy_write On On
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/sessions /var/lib/php/sessions
session.serialize_handler php php
session.sid_bits_per_character 5 5
session.sid_length 26 26
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies 1 1
session.use_only_cookies 1 1
session.use_strict_mode 0 0
session.use_trans_sid 0 0
uj5u.com熱心網友回復:
我發現了我遇到這個問題的原因,我要承認我做了一些我不應該做的事情。我修改了我的示例以“簡化”問題。雖然我發布http://local.mydev.com了我應該發布的是http://local.myCompanyWebsite.com. 事實證明,我們的生產網站 ( https://myCompanyWebsite.com) 在瀏覽器中也有一個會話,并且 cookie 發生沖突。
我發現在我的 hosts 檔案中修改域,或者在隱身視窗中訪問 url,會導致測驗腳本按預期作業。
我不確定是否有辦法讓它們一起作業,或者是否最好只使用不同的域。我確實注意到開發 cookie 有 PHPSESSID 而生產有 __utmc。我不確定是什么原因造成的,因為兩個實體都將 PHPSESSID 列為 session.name
uj5u.com熱心網友回復:
無條件呼叫session_start()正如它所說的那樣:它在沒有任何 if 或 then 的情況下開始一個新會話;始終首先檢查會話 ID。還要確保 cookie 域已正確設定(此值可能不匹配)。供參考:setcookie()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427914.html
上一篇:阻止特定目錄上的爬蟲
