[英]Accessing PHP session variable from different paths
我在PHP會話中面臨一個非常奇怪的問題,這是事實:
創建會話變量代碼-mydomain / a / b / c / create_session.php
<?
session_start();
$_SESSION['test'] = "Hello World";
?>
讀取會話變量讀取mydomain / a / b / c / read_session.php
<?
session_start();
echo $_SESSION['test'];
?>
問題
當我從同一URL中訪問read_session.php代碼時,它工作正常。 但是,當我嘗試從其他路徑讀取會話變量時,它不起作用。
例子
mydomain / a / b / c / read_session.php-可行!
mydomain / a / b / read_session.php-有效!
mydomain / a / read_session.php-有效!
mydomain / read_session.php- 不起作用!
mydomain / d / read_session.php- 不起作用!
那不是問題。
域必須完全相同(cookie策略),這意味着http://www.domain與http:// domain不同
您可以嘗試使用session_set_cookie_params
,以防萬一您有一個配置設置將某些事情弄亂了:
session_set_cookie_params(0, '/');
session_start();
您可以將Cookie配置為僅在域中的某些路徑上可用。 這可能發生在這里。 注意,如果這是問題所在,最好的解決方法是更改php.ini
的值:
session.cookie_path = "/"
正如Briedis所說,您可能沒有使用相同的域。 他們是一樣的。
確保檢查一下session.cookie_paths 。 您的配置設置可能會將Cookie的路徑設置為“ / a”。 在這種情況下,您描述的功能將發生,因為路徑不匹配。
Cookies(以及會話ID的cookie)可以綁定到某些域和路徑。 PHP的會話ID的Cookie的默認配置為結合的餅干為當前域( session.cookie_domain )和路徑/
( session.cookie_path )。
也許您的會話配置與默認配置有所不同,因為cookie的路徑設置為/a
因此cookie僅在/a
有效,以及/a
是適當的路徑前綴的那些路徑(即/a/…
)也有效。
嘗試將cookie路徑更改為/
:
ini_set('session.cookie_path', '/');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.