2010-10-23 111 views
7

我将现有并成功运行的站点复制到新的开发服务器。无法更改php会话cookie名称

在新服务器上登录,现在坏了,我跟踪它到一个事实,即尽管会话cookie被重命名......

ini_set('session.name', 'DOMAIN1'); 

...浏览器会将存储sesssion如饼干PHPSESSID。

当我从新服务器上的应用程序中删除上述行时,登录再次工作。但这不是一个好的解决方案,因为另一个应用程序也使用该名称下的PHPSESSID。

我宁愿找到奇怪行为的原因,而不是使用解决方法。如果我不修复它,它会把我咬在别的地方。

也许这已经是足够的信息给某人给我一个提示。如果不是,哪些信息会有用?

这台机器是一个非常裸体和基本的Ubuntu 8.04服务器,我安装了aptitude的apache2,mysql和php5。我还更新了lokales和时区。

解决方案:

我取代了线以上从接受的答案验证码...

if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1')) 
{ 
    die('Unable to set sesssion scope'); 
} 

...并登录现在工作在新服务器上。

回答

8

有时会出现ini_set并且无法正确设置ini值,可能是权限问题。

以下并未完全解决ini_set的问题,如果有人知道为什么ini_set不适用于某些类型的主机,请分享!

尝试以下操作:

<? 
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1')) 
{ 
    die('Unable to set sesssion scope'); 
} 

phpinfo(); 
?> 

或者你可以只使用session_name()来设置它,病人一直劝你不要只是运行的功能,并希望if语句总是检查在和最坏的准备这种情况下,当你的应用程序变得可靠并且更少error_prone时。

+2

不,ini_set()不应该修改INI文件:请参阅http://php.net/ini_set否则这将是一个很大的潜在安全漏洞。 – mojuba 2010-10-23 20:40:12

+0

对不起,运行时只:) – RobertPitt 2010-10-23 20:42:41

+0

谢谢,经过几个小时的搜索它终于有效。我用你的例子中的4行替换了遗留代码,并修复了它! – mit 2010-10-23 21:17:27