2013-11-22 4 views
1

Я хочу временно хранить ряд массивов, которые будут использоваться по следующему запросу. Сохраненная информация содержит некоторые конфиденциальные данные, которые будут использоваться для навигации по этой странице с помощью ajax-вызова. Данные были разными от страниц к страницам. Поэтому мне просто нужно временно сохранить его для использования, когда пользователь находится на этой странице.Laravel 4 хранить временные данные

Во-первых, я пытаюсь сделать это с кешем: Cache::put($dynamickey, $multiArray, 20); Но это приведет к огромному количеству «нежелательных» кеш-памяти внутри папки даже после истечения срока ее действия.

Итак, я пробовал с сеансом флеша: Session::flash($dynamickey, $multiArray);. Это работает, когда пользователь открыт только 1 вкладку веб-страницы. Но если пользователь открывает несколько вкладок этого сайта, он ломается.

Например: 1. Пользователь просматривает этот сайт на tab1. 2. Затем пользователь просматривает этот сайт на tab2. Как только пользователь просматривает веб-сайт на tab2, данные сеанса для tab1 удаляются. 3. Пользователь возвращается и перемещается по содержимому tab1. Система прерывается и не работает.

Как хранить временные данные, которые будут удалены, когда они больше не требуются, но также хорошо работают с несколькими вкладками?

спасибо.

+0

Можете ли вы подробнее рассказать о том, что обычно применяется в приложении, и о проблеме с несколькими вкладками? – SamV

+0

Я разработал его лучше. Надеюсь, ты поймешь. Спасибо. – user1995781

+0

Ключевая часть здесь - вызов ajax, это то, что вам нужно для хранения данных? – SamV

ответ

3

Итак, на странице, которая на самом деле устанавливает данные сеанса, вам нужно будет создать динамический ключ, который вы также можете генерировать при выполнении вызова ajax. Итак:

Session:put($dynamicKey, $data); 

Поскольку сервер не знает, если у вас есть несколько вкладок открыть только обрабатывает большее количество запросов, мы должны различать AJAX запросы от стандартных. Это может быть достигнуто с помощью:

if (Request::ajax()) 
{ 
    if (Session::has($dynamicKey)) { 
     Session::forget($dynamicKey); 
     // Do your application logic 
    } 
} 

Так сессия не будет удалена, пока Ajax запрос не будет сделан, где вы можете регенерировать этот ключ, теперь, если вы не можете восстанавливать этот ключ из данных, предоставленных тогда вы не можете отличить друг от друга два разные запросы. Таким образом, вам нужно будет получить этот ключ на стороне клиента, как, например, повторить его в несколько javascript.

Теперь вызов AJAX может использовать этот ключ и отправить его в запросе, где ваш сервер может забрать его и найти правильную сессию этого tab.

Надеюсь, вы это понимаете.

+0

Большое спасибо за ваш ответ, FruityP. Только один вопрос: как работает php-сессия? Всегда ли он хранится в памяти до истечения срока его действия? Или он сохраняется как файл и доступен только при выполнении страницы. Как только страница закончится, она будет удалена из памяти? Просто моя маленькая забота о производительности. – user1995781

+0

Сессии хранятся в файле, и я уверен, что когда вызывается 'session_start()' (Laravel сделает это для вас), он загружает ваши данные сеанса в память для этого запроса. Вы не должны беспокоиться об этом. Если вы временно храните много данных, вы можете выполнить те же шаги выше с кешем. – SamV

Смежные вопросы