Php

子域無法辨識 PHP 會話

  • April 4, 2015

我有一個帶有使用者數據庫和登錄表單的網站。該系統已 100% 完美執行。我有一個名為 name= 的主站點www.example.com和一個名為accounts.example.com. 當使用者登錄時,他或她會登錄主站點,www.example.com/login.php.

要查看他們的個人資料並進行編輯,他們點擊將他們帶到 的連結accounts.example.com/profile.php?user=theirusername。當頁面載入時,如果他們正在查看自己的帳戶,則假設會顯示一個編輯按鈕。我這樣做是這樣的,<?php if($user == $dbusername){ echo"<a href='edit.php'>EDIT</a>";}。如果我轉到 ,此功能可以正常工作www.example.com/Accounts/profile.php?user=theirusername,但在子域上它不起作用。accounts.example.com指向相同的路徑www.example.com/Account/

我不知道為什麼會這樣,我正在使用標準的 php SESSIONS。當我在 Safari Inspector 中查看 Cookies 選項卡時,它顯示 1 SESSION, accounts.example.com.

有沒有辦法將cookie“攜帶”到另一個子域?任何幫助都會很棒!謝謝!

如果你需要在兩個子域中使用cookie www.example.comaccounts.example.com你需要在根域上設置它example.com。您需要將 PHP 設置session.cookie_domain更改為".example.com".

  1. 在 php.ini 你可以有session.cookie_domain = ".example.com"
  2. .htaccess 變體:php_value session.cookie_domain .example.com
  3. 或者在 PHP 腳本中:ini_set('session.cookie_domain', '.example.com' );

這是首選順序:如果您有權訪問伺服器配置,則應在所涉及php.iniVirtualHosts 中執行此操作。第三個選項是最糟糕的,因為您必須在每個 PHP 腳本上單獨更改它。

引用自:https://serverfault.com/questions/680261