2011-06-11 42 views
0

我正在使用CI。 我想在子域 共享會話,並且我使用數據庫來存儲會話通過PHP中的子域共享會話

我已經試過這

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 

if(session_id ==''){session_start();} 

這意味着XYCOM和zycom將使用通用會話 幫助我,請

+5

可以打印出'SUBSTR($ _ SERVER [ 'SERVER_NAME'],strpos($ _ SERVER [ 'SERVER_NAME'], 「」),100)',也許你就錯了那裏。我建議你在那裏使用'* .abc.com'或'.abc.com'。 (手動) – 2011-06-11 20:55:42

+0

問題是什麼?這個解決方案看起來應該可行。 – Halcyon 2011-06-11 22:08:58

+0

檢查出我使用 其功能工作 http://stackoverflow.com/questions/2835486/php-session-shared-with-subdomain/17638102#17638102 – boksiora 2013-07-14 09:24:29

回答

5

考慮到你已經知道你的域名的事實,你有使用substr來確定它的一個原因嗎? (。)

ini_set('session.cookie_domain', '.domain.tld'); 

餅乾跨多個子域工作,Cookie域必須以點之後的所有子域的公共部分(開始:如果你只是用你可能會更可讀最有可能的domain.tld。)

另外,您的帖子的第二行,您檢查會話是否需要啓動的錯誤。您在session_id後缺少一組括號,因爲它是一個函數而不是常量。條件語句(if)總是失敗,導致每次都調用session_start()。

if (empty(session_id())) session_start(); 
+0

我應該在哪裏添加或編輯該在CI?笨? – 2011-06-14 00:51:22

+2

在你的配置文件中,添加'$ config ['cookie_domain'] =「.domain.tld」;'CodeIgniter將負責爲你處理會話。請務必將「.domain.tld」更改爲您的域名(並確保它以點開頭)。 – 2011-06-14 01:06:11

+0

兄弟,如果我想分享會話到http://x.com和http:// yxcom 我該怎麼辦 ? – 2011-06-19 20:00:34

5

更改其他會話設置並啓動新的會話之前設置一個新的session.name。 見下面的注意事項:

//Name your session for changes to be applied to. 
session_name('my_session'); //Any arbitrary short name. Must have at least on letter char. 

//Force a common cookie domain to apply to all subdomains. 
ini_set('session.cookie_domain', '.domain.com'); //Change '.domain.com' accordingly. 

//Start the Session if session_id() returns nothing. 
if(empty(session_id())) { session_start(); } 

這一直爲我工作。關於此的php.net文檔很少,但它似乎與社區中的許多人達成共識。

1

我假設這將進入處理登錄並啓動會話的登錄文件?

我在我的登錄文件中有以下代碼。是的,我是一個剪切和粘貼編碼器:)

這是否意味着它應該跨子域工作,因爲它說它是持久會話?

@session_start(); 
        $usersession = generate_session(100); 
        $host_name = '.'.str_replace('www.','',$_SERVER['HTTP_HOST']); 
        if($_POST['persistent'] == 'yes'){         
          setcookie("usersession", $usersession, time()+ ($_POST['persistentFor']*7*24*60*60), "/", $host_name, 0); 
        } 
        $_SESSION['usersession'] = $usersession; 
        $user_ip = get_ip(); 
        $insert_session = @mysql_query("INSERT INTO `memb_usersessions` 
          (`session_id`,`user_id`,`session_date`) VALUES  ('$usersession','$get_user[user_id]',NOW())");