簡體   English   中英

在子域之間共享PHP中的會話變量

[英]Sharing session variables in PHP between subdomains

我想使用許多子域在PHP中共享我的會話變量。 我有那個例子:

  • example.com
  • subdomain1.example.com

我嘗試在兩個域之間使用相同的會話變量。 我已經在PHP中測試了很多功能,但沒有任何效果。 這是我的測試方法:

在example.com/page.php上,我進行了測試:

echo '<pre>';
var_dump(session_set_cookie_params(0, '/', '.example.com')); 
session_start(); 
echo "Session ID : ".session_id()."\n";
$_SESSION['foo'] = 'bar';
print_r($_SESSION);

在subdomain1.example.com/page.php上,我有一個:

echo '<pre>';
session_set_cookie_params(0, '/', '.example.com');
session_start();
echo "Session ID : ".session_id()."\n";
print_r($_SESSION);

我可以看到兩個頁面之間的會話ID相同,但是在subdomain1.example.com/page.php中無法讀取會話變量

我測試了許多功能,例如為會話設置名稱,但是沒有更多結果。

謝謝。

我能想到的唯一方法是將會話數據保存到cookie,然后在訪問其他域時打開cookie。 您可以在此處閱讀如何執行此操作: http : //www.depiction.net/tutorials/php/cookies-session-variables.php

出於好奇,您為什么要這樣做?

如果您想避免使用基於cookie的解決方案,並且兩個域都可以訪問同一數據庫,則將會話存儲在數據庫中而不是文件系統中:

這是php.net上該會話的注釋示例: http : //php.net/manual/zh/book.session.php

如果無法存儲在Cookie中,則可以使用共享緩存層。 它可以是MySQL之類的數據庫,甚至可以使用APC(如果它由同一台服務器提供服務)。 您也可以使用內存緩存。 基於Memcache的會話比使用數據庫要快。 有關memcache會話存儲的更多信息,可以在這里找到:

http://php.net/manual/en/memcached.sessions.php

下面的代碼已經過測試並且可以正常運行,而不需要直接的cookie操作(會話本身除外)或諸如Memcache / DB存儲之類的復雜對象。

ini_set('session.cookie_domain', '.sonassi.com' );
session_name('sonassi');
session_start();

只要確保兩個域都可以訪問session_save_path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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