簡體   English   中英

從不同路徑訪問PHP會話變量

[英]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.domainhttp:// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM