簡體   English   中英

跨越同一域的子頁面的PHP會話

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

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