簡體   English   中英

在多個子域之間共享會話變量

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

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