![](/img/trans.png)
[英]php, mySQL & AJAX: Unable to use sessions across the scripts in the same domain
[英]PHP Sessions across subpages of same domain
我有一個域(domain.com),其中有多個子頁面具有不同的會話(默認情況下),我希望其中一些子頁面可以共享會話。
例如,我有domain.com/section1/staff/
和domain.com/section2/staff/
。 我使用$_SESSION
變量來存儲當前登錄用戶的信息,我希望能夠在section1/staff/
登錄一次,並且當我轉到section2/staff/
時仍然登錄。
從閱讀其他帖子看起來這似乎是會話應該工作的默認方式,並且在兩個頁面中都沒有設置域,並且路徑在session_get_cookie_params()
是“/”所以它應該是相同的會話但它不共享$_SESSION
變量,即使我調用session_destroy()
也不會破壞其他會話。
有沒有辦法明確地設置它們使用相同的(或另一個地方來查找不會出現在session_get_cookie_params()
數組中的默認設置)?
默認情況下,PHP將對同一域中的所有腳本使用相同的會話。 請注意domain.com和www.domain.com之間的互動,因為他們可能沒有相同的會話。
不是為每個部分創建完全獨立的會話,為什么不為用戶和部分使用單個全局會話? $ _SESSION沒有理由不能成為多維數組。
//// things needed in multiple sections could go into a common grouping:
$_SESSION['common']['user'] = 'josh';
$_SESSION['common']['privileges']['section_access'] = array( 'section1'=>"yes", 'section2'=>"no", 'section5'=>"security-prompt" );
//// while things that were section specific could be grouped by section:
$_SESSION['section1']['agreed_to_terms'] = true;
//// you could also group by logical functionality:
$_SESSION['staff']['badge_no'] = 44815;
使用這種結構,您可以在每個腳本中獲得所有可用信息,但只能使用您需要的部分。
此外,這可以節省您在邏輯中處理session_name()和其他棘手位的麻煩。 另外,這解決了如何在會話之間共享一些信息(例如當前用戶)的問題。
處理$_SESSION
時通常的建議是確保session_start(); 在所有PHP腳本的頂部調用,之前是其他任何東西。
例:
<?php // file1.php
session_start();
// other stuff...
$_SESSION['user'] = 'josh';
?>
<?php // file2.php
session_start();
// other stuff...
echo $_SESSION['user']; // should print "josh"
?>
問題是,一個部分強制URL到domain.com,另一個部分強制它到www.domain.com。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.