Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перебрать все файлы сессии

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: ..и удалить некоторые из них
Contr
Отправлено: 05 Июля, 2014 - 11:34:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Есть файлы сессий в папке $dir с таким содержимым:
CODE (htmlphp):
скопировать код в буфер обмена
  1. loggedIn|b:1;dbname|s:5:"S-H-V";pnum|d:5;depnum|i:5;smu|i:1;orgnum|i:1;time|s:1:"4";name|s:11:"Федот";objects|a:2:{i:0;a:3:{s:6:"objnum";i:1;s:7:"objname";s:27:"лч";s:7:"objtype";s:4:"line";}i:1;a:3:{s:6:"objnum";i:2;s:7:"objname";s:6:"УРГ";s:7:"objtype";s:2:"cs";}}objnum|i:1;objtype|s:4:"line";;

требуется удалить все файлы, в которых dbname === "S-H-V"
Есть ли готовые функции php для превращения из "этого" массива? самому писать лень Не понял
 
 Top
LIME
Отправлено: 05 Июля, 2014 - 11:41:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




нет
прав нет на прямые действия
храни сессии в бд(ручками их пиши и читай)
это гораздо гибче
 
 Top
Мелкий Супермодератор
Отправлено: 05 Июля, 2014 - 12:21:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А потом окажется, что на боевой машине включен suhosin session encrypt

Допишите в бутстрапе/фронтконтроллере
PHP:
скопировать код в буфер обмена
  1. if (isset($_SESSION['dbname']) and 'S-H-V' == $_SESSION['dbname']) session_destroy();

И всё. Сборщик мусора сам приберётся.


-----
PostgreSQL DBA
 
 Top
Contr
Отправлено: 05 Июля, 2014 - 12:23:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Мелкий, фишка в том, что session destroy надо вызвать с другой сессии.
(Добавление)
Мелкий пишет:
А потом окажется
не окажется. "машина" моя
 
 Top
LIME
Отправлено: 05 Июля, 2014 - 12:26:24
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Contr пишет:
что session destroy надо вызвать с другой сессии.
а нафига
ну лежат они не собраные
но при первом же запросе будут удалены значит считай что их нет
если только из другого движка не создаются
и еще
обрати внимание
LIME пишет:
храни сессии в бд(ручками их пиши и читай)
можно делать любые выкрутасы
хотя может тебе не нужно
 
 Top
Contr
Отправлено: 05 Июля, 2014 - 12:31:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




LIME пишет:
можно делать любые выкрутасы
Возможно...
LIME пишет:
хотя может тебе не нужно
наверно...
Да и создание объекта ПДО постгре при простеньком запросе тоже не вариант
 
 Top
LIME
Отправлено: 05 Июля, 2014 - 12:34:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а чтение файла каждый раз вариант?
создание объекта быстрее если данные не менялись(кэш запроса)
а если менялись всеравно может быть быстрее но никак не медленнее
(Добавление)
а по хорошему сессии надо хранить в memcache/redis

(Отредактировано автором: 05 Июля, 2014 - 12:34:41)

 
 Top
Contr
Отправлено: 07 Июля, 2014 - 14:37:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Напишу решение:
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. $dir = ini_get("session.save_path") . "/";
  3. $a = array_diff(scandir($dir), ['.', '..']);
  4.  
  5. foreach ($a as $v) {
  6.     if ('sess_' . session_id() !== $v) {
  7.         $a = file_get_contents($dir . $v);
  8.        
  9.         $arr = session::unserialize($a);
  10.         foreach ($arr as $val){
  11.             if(isset($val['b']) && $val['dbname'] === "S-H-V"){
  12.                 unlink ($dir . $v);
  13.             }
  14.         }
  15.     }
  16. }

(Добавление)
Как Вам такое решение? Хорошо
(Добавление)
Сам метод:
Спойлер (Отобразить)
 
 Top
esterio
Отправлено: 07 Июля, 2014 - 16:08:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Contr
не срабортает. Думал такое будет работать но нет.
Проще делать так

как-то так
 
 Top
Contr
Отправлено: 07 Июля, 2014 - 18:29:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




esterio пишет:
Contr
не срабортает. Думал такое будет работать но нет.
Проще делать так

как-то так

Ну так перебирать сессии все равно надо. Откуда вы возьмете сессион ид?
Там то вся фишка в том, чтобы перебрать файлы сессии.
Что вы предложили, заменит только последнюю строчку: вместо unlink (удалить файл) написать сессион дестрой
(Добавление)
Так почему не сработает? У меня срабатывает. Все нормуль
 
 Top
esterio
Отправлено: 07 Июля, 2014 - 18:41:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Contr пишет:
Так почему не сработает? У меня срабатывает. Все нормуль

Contr пишет:
$a = file_get_contents($dir . $v);

Я когда-то пробовал и мне не удавалось получить содержимое фала сессии. Может версия ПХП древняя незнаю
 
 Top
Contr
Отправлено: 07 Июля, 2014 - 18:44:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




esterio пишет:
Я когда-то пробовал и мне не удавалось получить содержимое фала сессии
Его и нельзя получить: он занят (если хоть раз в скрипте произошла инициализация сессии)
А вот чужие файлы читать и удалять никто не мешает
(Добавление)
свой тоже можно, если в скрипте не было обращения к сесиии
 
 Top
Мелкий Супермодератор
Отправлено: 07 Июля, 2014 - 18:47:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Contr, прокомментируйте всё-таки вот это:
LIME пишет:
ну лежат они не собраные
но при первом же запросе будут удалены значит считай что их нет

Я не стал спрашивать повторно, т.к. LIME верно раскрыл мою мысль: каково обоснование к написанию своего сборщика мусора?
(Добавление)
Contr пишет:
он занят (если хоть раз в скрипте произошла инициализация сессии)

session_write_close


-----
PostgreSQL DBA
 
 Top
Contr
Отправлено: 07 Июля, 2014 - 19:05:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Мелкий пишет:
Contr, прокомментируйте всё-таки вот это:
LIME пишет:

Раз Лайм пишет, вот и пускай коментирует )))
Я не понимаю о чем он пишет:
Кто собранный? Кто будет удален?
Суть в том, что в моем проекте (да и даже на этом форуме) при каждом запросе к серверу происходит проверка на доступность пользователя к своему функционалу. Задача: удалить выкинуть пользователя на страницу авторизации. Проще всего это сделать удалив файл сессии.

А насчет БД, ну этой хз)) То что теперь при каждом запросе надо создавать объект БД (PDO) - это выйдет дороговато. К тому же не все запросы вообще проходят класс "модель" с подклассом "БД" - в проекте есть "легкие" контроллеры, возвращающие сразу одной или два значений.
(Добавление)
Contr пишет:
session_write_close
за это спасибо
 
 Top
LIME
Отправлено: 07 Июля, 2014 - 20:01:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




чтение файла vs создание объекта
что быстрее?
нормальные люди давно не пользуются встроенными сессиями
а пояснять уже мне нечего
тем более не мои мысли просили пояснить
грустно это как-то
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB