首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改符号链接会破坏PHP会话

更改符号链接会破坏PHP会话
EN

Stack Overflow用户
提问于 2011-04-16 03:36:06
回答 2查看 612关注 0票数 1

我正在Apache上运行一个PHP/Yii应用程序。我试过以下几点:

  1. My DocumentRoot是"www",这是一个符号链接。符号链接指向/usr/local/src/releases/mysite-1/www
  2. I重命名/usr/local/src/ /usr/local/src/releases/mysite-2/www
  3. I /mysite-1/ www目录,以/usr/local/src/releases/mysite-2/www
  4. I删除旧的www符号链接,使用: rm -f www
  5. I创建一个新的符号链接,使用: ln -s /usr/local/src/

/mysite-2/ www。

只要这样做,PHP会话就会被销毁,甚至不会重新启动Apache。有什么想法吗?我已经检查了我的PHP,它不应该是一个问题,因为我使用save_path进行会话处理。我的Apache配置如下所示:

代码语言:javascript
复制
DocumentRoot "www"
<Directory "www">
   Options -Indexes +FollowSymLinks
   RewriteEngine on
   # if a directory or a file exists, use it directly 
   RewriteCond %{REQUEST_FILENAME} !-f 
   RewriteCond %{REQUEST_FILENAME} !-d 
   # otherwise forward it to index.php 
   RewriteRule . index.php 
   ...

编辑:,我怀疑问题出在Yii。经过一些进一步的测试,看起来会话数据并没有真正被销毁。我已经切换到了基于文件的会话。我现在看到的是:

  1. 用户登录,会话id设置为tdv3l6jgf2sb1dnutt7updhfo1
  2. 会话数据,如下所示:

数组(5){ "20b30da82f6dcc260a66f6a1044a5c3a__id"=>字符串(1) "2“"20b30da82f6dcc260a66f6a1044a5c3a__name"=> string(8) "20b30da82f6dcc260a66f6a1044a5c3afbId"=> string(10) "1028251971”“20b30da82f6dcc260a66f6a1044a5c3FbUser”=>bool(真) "20b30da82f6dcc260a66f6a1044a5c3a__states"=>数组(3){ "fbId"=> bool(真) "isFbUser"=> bool(真)“array”=>bool(真)}

  • 会话文件创建于//如上文所述,tmp

  • I将更改www符号链接。会话id保持不变,会话数据完好无损!但是Yii::app()->user->isGuest正在评估为true。所以会话数据仍然存在,但是Yii认为我被注销了!

您是否还会将用户数据写入另一个位置?state.bin文件位于www之外的运行时dir中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-19 09:16:15

我不知道是什么引起了这个问题,但我想出了一个解决办法。

而不是:

  1. 将www符号链接更改为d-xxx,其中xxx是发布版

我现在:

version

  • Extract

  • 将旧的发布目录"d“移到d-yyy,其中yyy是旧的发行版

  • ”www“符号链接,然后仍然指向"d"

因此,"www“符号链接的真正路径永远不会改变。这解决了这个问题,我不知道为什么会这样。同时,我还手动设置了Yii的validationKey和encryptionKey的securityManager。

在这一点上,我唯一怀疑的是APC和我的设置发生了一些不稳定的事情。

票数 2
EN

Stack Overflow用户

发布于 2015-06-18 15:36:49

Yi1.x:СApplication.php中有奇怪的代码

代码语言:javascript
复制
public function getId()
{
    if($this->_id!==null)
        return $this->_id;
    else
        return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name));
}

因此,您只需要在应用程序配置文件中设置应用程序id。

例如,受保护的/config/web.php

代码语言:javascript
复制
return  [
         'id'=>'my application'

..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5684301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档