[英]Sharing SESSION Variables Between Multiple Subdomains
我有一個網站 www.example.com。 這將有多個子域與單個應用程序或程序一起使用。 例如,login.example.com 將允許用戶登錄站點,而 system.example.com 將允許用戶訪問信息系統,而 forums.example.com 將允許用戶訪問論壇。
我們可能需要在子域之間傳遞信息,例如用戶 ID 或用戶偏好等。我們如何使用 SESSION 變量在子域之間傳遞信息?
編輯:我喜歡這個想法:
作為腳本中的第一件事:
ini_set('session.cookie_domain', '.example.com' );
1)子域應該使用相同的路徑來保存會話文件
2)修改你的
php.ini session.cookie_domain = ".example.com"
或 .htaccess php_value session.cookie_domain .example.com
或腳本ini_set('session.cookie_domain', '.example.com' );
PHP 會話 ID 保存在 Cookies 中。 要使 cookie 在所有子域中可用,您需要將其分配給根域。 然后所有子域將從 cookie 中獲取會話 ID,PHP 可以使用傳遞的會話 ID 找到會話。
事實證明,您只需要在php.ini
文件中將session.cookie_domain
設置為根域
session.cookie_domain = ".example.com"
還要查看用於設置 ini 條目的不同方法的手冊。
我找到了解決我的問題的方法:
session_name("2620368ghwahw90w");
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();
這似乎沒有問題。 這是一個安全風險低的好方法嗎?
在 php 文件中創建會話之前,請在第一行添加以下行:
<?php
//session cross to sub domain
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
你可以使用cookies。 檢查setcookie() 中的path
參數,該參數使該 cookie 可用於整個域。 這樣做的缺點是人們會關閉 cookie(私人瀏覽模式)
另一種方法是使用鏈接或隱藏的<input>
字段(用於表單)傳遞 sessionID 。
由於單獨的網站不共享會話(據我所知,因為子域在技術上是彼此“不同的地方”),所以不要使用會話來存儲在服務器端。 相反,使用數據庫來處理您的會話。 這樣,多個站點可以共享同一個會話跟蹤表。
我已經研究了一段時間了,對我有用的是將代碼放在下面:
session_name("some_session_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();
跨將使用會話變量的所有子域。 我在我的索引 php 文件的開頭設置了它,它可以工作。 希望這會說清楚。
像魅力一樣工作!
我相信最干凈的方法是在你 .env 中創建一個變量SESSION_DOMAIN=.example.com
或者,您可以打開config/session.php
並設置'domain' => env('SESSION_DOMAIN', '.example.com')
,所有子域,例如。 domain.example.com
, test.example.com
甚至example.com
共享相同的會話
這應該適用於大多數(如果不是全部)情況:
<?php
if (!session_id()) /* If session is not started yet, then... */
{
ini_set('session.cookie_domain', substr_count($_SERVER['SERVER_NAME'],'.') > 1 ? ('.'.substr($_SERVER['SERVER_NAME'], strpos($_SERVER['SERVER_NAME'], '.') + 1)) : ('.'.$_SERVER['SERVER_NAME']));
session_start(); /* Start session now. */
};
?>
要在子域之間共享會話 cookie,您必須將 cookie 的域設置為.example.org
(注意點)。
http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.