我正在尝试确定php会话是否有可能重叠。我注意到一个非常奇怪的错误,我不能重现,我只是想看看会话重叠是否可能发生问题。(只是为了排除它)
我在application/config/database.php中有以下内容
$client_name = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
$db['default']['hostname'] = "server";
$db['default']['username'] = "staging";
$db['default']['password'] = "PASSWORD";
$db['default']['database'] = "staging_$client_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "app_";
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_unicode_ci";此外,我还使用了位于的会话库(将代码触发器会话库替换为本机会话:http://www.philsbury.co.uk/index.php/blog/code-igniter-sessions/
我使用memcached来存储会话。正在发生的错误是数据以某种方式结束在会话中,我认为这是不应该的。下一次我会有更多的信息,但我只是想排除会话是否会以任何方式重叠。
编辑:有没有一种更干净的方式来做这件事(在php中可用)?$_SERVER‘’HTTP_HOST‘是否始终可用且可安全使用?
session_start();
if (!$this->userdata('domain'))
{
$this->set_userdata('domain', $_SERVER['HTTP_HOST']);
}
if ($this->userdata('domain') != $_SERVER['HTTP_HOST'])
{
die(lang('common_session_hijacking_attempt_no_access_allowed'));
}发布于 2014-08-02 07:05:25
您只需要为PHP会话ID所在的cookie设置域。
bool setcookie ( string $name [,string $value [,int $expire =0 [,string $path [,string $domain[,bool $secure = false,bool $httponly = false ])
域
cookie可用于的域。将域设置为“www.example.com”将使cookie在www子域和更高的子域中可用。Cookie可用于较低的域,如“example.com”,将可用于较高的子域,如“www.example.com”。仍在实现已弃用的»RFC2109的旧浏览器可能需要一个前导。匹配所有子域。
http://php.net/manual/en/function.setcookie.php
基本上,任何yoursite.com可用的cookie都将可用于该域名的任何子域,但如果您将域名设置为subdomain.yoursite.com,则父域名将不可用。
编辑:
我误解了问题是什么,我认为在人们复制cookie的情况下,您可以做的是根据HTTP主机设置session保存位置:
session_save_path("/tmp/" . $_SERVER['HTTP_HOST']);然后,理论上它应该在每个子域的基础上拥有会话-即使会话ID匹配...它不会为那个子域找到它。但我可能错了。
或者,由于您使用的是memcache,您可以应用这个概念,并修改库来命名您的会话:
$_SESSION[$key] = $val;变成:
$_SESSION[$_SERVER['HTTP_HOST']][$key] = $val;和
return ( ! isset($_SESSION[$_SERVER['HTTP_HOST']][$item])) ? false : $_SESSION[$item];变成了
return ( ! isset($_SESSION[$_SERVER['HTTP_HOST']][$item])) ? false : $_SESSION[$_SERVER['HTTP_HOST']][$item];等。
https://stackoverflow.com/questions/25089570
复制相似问题