【问题标题】:preventing sessions from recreating for a page防止会话重新创建页面
【发布时间】:2014-03-22 10:46:58
【问题描述】:

我开发了一个页面。每当用户访问该页面时,都会创建一个会话。现在,如果用户在浏览器的两个不同选项卡中打开同一页面,则会创建两个不同名称的会话。

我正在使用

public function actionSessionCreate(){
    do {
        $sessionName=  uniqid();
    }while (isset(Yii::app()->session[$sessionName]));
    Yii::app()->session[$sessionName]='any value';
}

用于创建会话名称。 到目前为止,它工作正常。

但我可以预见的问题是,如果用户只是刷新页面,那么它也会为此创建一个新会话。而且,如果用户只是来回移动,则会一次又一次地创建一个新会话。
那么我该如何解决这个问题呢?

My logic:- 我正在考虑在 URL 中发送一个标识符,该标识符将在创建会话名称时使用。因此,如果用户只是刷新同一页面,它将检查包含标识符的任何会话名称。如果找到它,它将不会创建会话。否则它将创建它。

我应该遵循这个逻辑吗?或者我不应该玩这样的会话?

【问题讨论】:

  • 您在创建新会话之前检查过会话吗?
  • 我无法检查会话名称,因为会话名称没有从一页传递到另一页。它仅在该页面上创建,并且具有唯一名称。当用户刷新页面时,我也会丢失会话的名称。
  • id 你的控制器和动作有一个唯一的名字,你可以使用它们

标签: php session yii


【解决方案1】:

试试这个,

if(!Yii::app()->user->hasState($sessionName)){   //checking whether the session occurs

    Yii::app()->user->setState($sessionName,"value");   //setting the session variable

}

用于访问会话变量

Yii::app()->user->getState($sessionName);

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多