繁体   English   中英

在 PHP 中的子域上共享 session

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM