如何防止特定会话的破坏

时间:2015-11-19 10:14:52

标签: php session yii2

我将Yii2框架用于我当前的项目。我的问题是当用户注销所有会话都被销毁但是在前端我注册了会话后需要在注销过程中存在。

PHP中是否存在存储该会话的方法?

1 个答案:

答案 0 :(得分:0)

您可能需要实际创建2个单独的会话。为此,我认为高级模板将是最好的起点。前端将是您的主要站点,后端将是您的登录区域。如果需要,您甚至可以为管理员面板制作第3名。

在您的配置中,您需要指定不同的会话。我使用它的方法是将我的前端与后端完全分开。

配置示例;

'components' => [
    'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_frontendUser', // unique for frontend
        ]
    ],
    'session' => [
        'name' => 'PHPFRONTSESSID',
        'savePath' => sys_get_temp_dir(),
    ],
    ....

你会对后端做同样的事情,只使用不同的名字。

如果他们在登录时仍然可以访问主站点,则需要进行一些额外检查,例如检查其他会话是否存在。您可以制定一个特殊规则,将它们从主站点重定向到登录区域(如果存在)。如果他们仍然需要访问主站点但知道他们是否已登录(比如显示注销而不是登录链接,或显示他们的用户名),那么你将不得不引用其他会话。

我不确定你是否真的可以使用来自另一个部分的会话......一种解决方法是在第一个会话中存储关于第二个会话的数据。在您的登录例程中,您需要将用户数据注入第一个会话。在注销时,将其删除。

不确定我们的目标是什么,还有一些事情需要关注(比如你是否可以在没有hacky选项的情况下访问另一个会话)。

但是,我认为您现在的挂断是需要在配置中定义单独的会话值。

我还应该补充一下,我写了一个关于如何在这里开展2个单独会话的维基:http://www.yiiframework.com/wiki/814/guide-how-to-actually-separate-frontend-user-and-backend-admin-on-yii2-advanced/

yiii2 advanced问题,默认情况下,如果您登录前端,您也会登录到后端。好吧,如果你使用前端作为成员和后端作为管理员,你不希望它那样!会员不应该登录管理区域。所以你必须让他们分开两次。

虽然我的维基用途略有不同,但我认为它源于同样的问题,可能会帮助你解决这个问题。