[英]sharing session over subdomains in PHP
我正在使用 CI。 我想在子域上共享 session 我正在使用數據庫來存儲會話
我試過這個
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
if(session_id ==''){session_start();}
這意味着 xycom 和 zycom 將使用常見的 session 幫助我,請
考慮到您已經知道您的域名這一事實,您是否有理由使用 substr 來確定它? 如果您剛剛使用,您可能會更具可讀性:
ini_set('session.cookie_domain', '.domain.tld');
為了使 cookies 能夠跨多個子域工作,cookie 域必須以點 (.) 開頭,后跟所有子域的公共部分(很可能是 domain.tld.)
此外,您帖子的第二行,即您檢查是否需要啟動 session 的那一行是錯誤的。 session_id 后面缺少一組括號,因為它是 function 而不是常量。 條件語句 (if) 總是會失敗,導致 session_start() 每次都被調用。
if ( empty(session_id()) ) session_start();
在更改其他 session 設置並啟動新的session之前設置新的 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 文檔很少,但似乎是社區中許多人的共識。
我假設以上內容會將 go 放入處理登錄並啟動 session 的登錄文件中?
我的登錄文件中有以下代碼。 是的,我是一個剪切和粘貼編碼器:)
這是否意味着它應該跨子域工作,因為它說它是持久會話?
@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())");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.