2014-02-21 5 views
0

Я разработал страницу. Всякий раз, когда пользователь посещает эту страницу, создается сеанс. Теперь, если пользователь открывает одну и ту же страницу на двух разных вкладках браузера, создаются две сессии с разными именами.предотвращение воссоздания сессий для страницы

Я использую

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

для создания имен сессии. До сих пор его рабочий штраф.

Но проблема, которую я могу предвидеть, заключается в том, что если пользователь просто обновляет страницу, то она также создаст для нее новый сеанс. А также, если пользователь просто перемещается вперед и назад, новый сеанс будет создан снова и снова.
Так как я могу решить эту проблему?

My logic:- Я собираюсь отправить идентификатор в URL-адрес, который будет использоваться при создании имени сеанса. SO, если пользователь просто обновляет одну и ту же страницу, он будет проверять любое имя сеанса, которое включает идентификатор. Если он найдет это, он не создаст сеанс. В противном случае это создаст его.

Должен ли я идти с этой логикой? Или я не должен играть с такими сеансами?

+0

сеанса сделал вы проверяете сессию перед созданием нового? –

+0

Я не могу проверить имя сеанса, поскольку имя сеанса не передается с одной страницы на другую. Он создается только на этой странице и тоже с уникальным именем. Когда пользователь обновляет страницу, я также теряю имя сеанса. –

+0

id Ваши контроллеры и действия имеют уникальное имя, вы можете использовать их –

ответ

0

Попробуйте это,

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); 
Смежные вопросы