| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > удаление сессии и как с эти бороться |
| Автор: Sniper 19.7.2008, 20:16 |
| проблема такая. Мои скрипты могут стоять без действия сутками, т.е человек вечером поработал с сайтом и оставил компьютер включённым на нём [на сайте] - пришёл утром и продолжил работу (его сессия не должна удалиться) но как известно через 24 минуты простоя "мусоросборщик" вычищает просроченные сессии рандомно с вероятностью 1% как сделать чтобы данные сессии не удалялись по крайней мере неделю? Может как-то через cookie? или сессиями можно обойтись? |
| Автор: Feldmarschall 19.7.2008, 20:18 |
| Это противоречит принципу работы сессий. Что у тебя такого важного в сессии хранится, что нельзя записать туда заново? |
| Автор: Sniper 19.7.2008, 20:20 | ||||
всё как у всех IP адрес и логин пользователя
вот тут не понятно, как перезаписать? |
| Автор: Feldmarschall 19.7.2008, 20:54 |
| И всего-то? И ты думаешь, что если тебя этот форум запомнил то это он сессию на год растянул? автологин куками делается, а не сессиями |
| Автор: Sniper 19.7.2008, 21:32 |
а как? |
| Автор: Feldmarschall 19.7.2008, 21:59 |
| осподи. да посмотри в любом поисковике "PHP автологин" ставишь куку. уникальную для юзера. если пришла - логин и пароль вводить не надо. что непонятного-то? |
| Автор: Sniper 19.7.2008, 22:27 |
| т.е надо сессии удалить и переделать всё на куки? |
| Автор: Feldmarschall 19.7.2008, 22:30 |
| господи, твоя воля нет, переделывать не надою. авторизация делается сессиями. автологин - куками |
| Автор: Sniper 19.7.2008, 22:43 | ||
какова последовательность действий всего этого? 1. создаём сессию 2. записываем логин в сессию 3. создаём куку 4. записываем логин пароль в куку (шифруем) Теперь сессия перестала существовать. что тогда делать? заново создавать сессию? из куки записывать в сессию данные? |
| Автор: Feldmarschall 19.7.2008, 22:46 |
| 1. просим логин, пароль и галочку "запомнить меня", как это проиходит на этом форуме и на миллионах других сайтов, некоторые из которых ты, может быть, как я очень надеюсь, видел. 2. проверяем логин и пароль. если правильные, то 3. стартуем сессию. 4. проверяем галочку, и если нажата, то ставим уникальную куку. а дальше - 0. проверяем куку, и, если есть, то не просим п.1 и не делаем п.2, а сразу п.3 |
| Автор: Sniper 19.7.2008, 22:57 |
| если выйти с сайта, то да так и будет. А если я нахожусь на какойто странице, я афк, прошли 24 минуты я вернулся, тыкаю на какую-то кнопку на этой странице, а всё, сессии нет уже, что тогда? по нажатию кнопки стартовать сессию? а так нельзя "заголовки уже отправлены" ;-). что то я пока не понимаю ;-( |
| Автор: Feldmarschall 19.7.2008, 23:01 |
С какой стати? Какая разница "находишься ты на странице и вернулся" или "выйти с сайта а потом зайти"? Что вообще такое "нахожусь на странице"? Тебя, похоже, надо послать популярную ссылку на танке почитать. |
| Автор: Sniper 19.7.2008, 23:11 | ||
| сейчас страницы выглядят примерно так: somepage.php
вот у меня в браузере эта страница http://mymegasuperhost.ru/somepage.php (я нахожусь на странице somepage.php]) сессия активна и всё хорошо. можно кликать на кнопку и мы увидим логин пользователя. Если сессия удалилась(прошли 24 минуты) а я нажал на кнопку Submit, то я получаю кучу ошибок, потому что $_SESSION['id_user'] то уже нету. Так вот вопрос: что делать когда на кнопку нажали, а сессии уже нет? |
| Автор: Feldmarschall 19.7.2008, 23:20 |
| Я даже затрудняюсь, что на это ответить. Ну, чтобы не было ошибок, надо, наверное, проверять. Если юзер залогинен, то выводить $_SESSION['id_user']. а если не залогинен - то не выводить. Тогда и ошибок не будет. а что сделать, когда с сайта ушли, и назад пришли - ты знаешь? Вот и сделай то же самое. |
| Автор: Sniper 19.7.2008, 23:30 | ||||
здорово конечно, но так не пойдёт ;-)
|
| Автор: Feldmarschall 19.7.2008, 23:38 |
| а зачем ты поменял местами if (isset($_POST['actionbutton'])) и session_start(); ? вообще, эти смайлики твои меня немного раздражают. ты бы писал поподробнее. чтобы я сразу на все твои вопросы ответил. ты каких-то элементарных вещей не понимаешь, но я никак не могу понять - каких именно. я пока только понял, как ты пишешь код - накопировал разных кусков, про которые где-то сказали, что "так правильно". но при этом зачем они, и как работают - понимание слабое. А часто - вообще неправильное. В результате и получаются такие усмешечки "так не пойдёт ;-)" пойдет. все пойдет. если хотя бы чуть-чуть выучить, что такое веб-сайт и как он общается с браузером. а если уж ты сподобишься проверять свои идеи на практике - так и вовсе проблем никаких не будет. Добавлено через 10 минут и 9 секунд Как я уже упоминал, по такой схеме работают все сайты - от этого до мейл.ру. поэтому первый шаг к реализации - это сначала ПОВЕРИТЬ мне. Что сработает. Этим ты значительно облегчишь себе задачу. |
| Автор: Nigel 20.7.2008, 09:59 |
| для начала прочитайте http://phpfaq.ru/session. Для того, чтобы сессия жила дольше 24 мин., есть session.gc_maxlifetime. В первом куске кода: зачем на 9-й строке стартуете сессию, если она уже есть на 2-ой? |
| Автор: Feldmarschall 20.7.2008, 10:30 |
| Nigel, для того, чтобы сессия жила дольше 24 мин. должны быть очень веские основания. И уж никак к этим основаниям не относятся туманные представления об основах функционирования веб-сайтов. Добавлено @ 10:33 Если ты понял, как сделать автологин, то какая проблема сделать в начале страницы автологин, и спокойно продолжить работу? Думаю, тебе надо ещё с ним разобраться. Предлагаю эту тему закрыть, поскольку вопрос "как продлить сессию" не имеет практического смысла, и начать новую, посвященную автологину. |
| Автор: Sniper 20.7.2008, 12:25 | ||
| размышляя в стоматологическом кресле я понял как надо сделать: начало любой страницы
когда пользователь первый раз логинится сделать соответствующие setcookie правильно? |
| Автор: Feldmarschall 20.7.2008, 12:30 |
| не совсем. реальная система сильно сложнее. но примерно так, да. если писать просто id, то любой сможет залогиниться под видом любого юзера - id обычно найти совсем несложно. твой, например, здесь - 192. надо писать что-то уникальное, и проверять по базе. |
| Автор: Sniper 20.7.2008, 14:19 | ||
что-то уникальное это что и по какой базе проверять? |
| Автор: Feldmarschall 20.7.2008, 14:22 |
| случайное число. по базе данных. в которую его записать. |
| Автор: Sniper 20.7.2008, 17:23 |
а чем это отличается от просто id? наверное это рандомное число надо менять с какой0то частотой... объясните подробнее |
| Автор: Feldmarschall 20.7.2008, 17:30 |
| Отличается тем, что его никто не знает, в отличие от id можешь сделать какой-нибудь хэш, к примеру, md5(секретное слово (общее для всего сайта+пароль юзера)) |
| Автор: Sniper 20.7.2008, 19:40 | ||
опять таки попрошу рассказать последовательность действий. 1. создаём секретное слово 2. пишем в БД, файл что потом? как использовать? 3. 4. |
| Автор: Feldmarschall 20.7.2008, 19:42 |
| как обычно. точно так же, как с id если у тебя пришел if в куке, ты можешь узнать по базе, что это за пользователь? если у тебя пришел секретный идентификатор, то какая проблема ТОЧНО ТАК ЖЕ найти в базе запись, содержащую такую строку? |