BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Работа със сесии, затворен браузер - сесия в база данни
Constantine
Публикувано на: 27-02-2018, 16:16
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 184
Регистриран на: 13.04.05



Здравейте колеги,

Имам следния случай.
Даден клиент се логва.
В базата данни се записва таблица с ид-то на сесията, (id) кога изтича (expire) и данни (data), потребител (user_id).

При логване на в таблицата за сесии се записват данните.
После при logout реда в таблицата се изтрива.

До тук всичко е ОК.

Интересно става когато клиета си затвори браузера. От базата не се трие дадената сесия.

Правя крон който трие спрямо променливата спрямо session.maxlifetime по даден интервал трие сесиите кото са изтекли.

Тук пробема е че maxlifetime = 100 мин и ако потребителя си затвори браузера по някаква причина тоййняма да може да да влезе в профила си докато не изтечат тези 100 минути.

user_id се ползва за да може да се проверява дали даден потребител е логнат.
Т.е ако съществува запис в таблицата за сесии потребителя няма да може да се логне.

Allowing only one user at the time

С Уважение Константин

PMEmail PosterUsers Website
Top
lucky
Публикувано на: 27-02-2018, 16:39
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 519
Регистриран на: 05.08.17



Просто инвалидираш (затриваш, зачистваш) старата сесия, ако се логне пак същият юзер.
PMEmail Poster
Top
hristonev
Публикувано на: 27-02-2018, 16:54
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 399
Регистриран на: 19.09.17



@Constantine логиката ти нещо ми се губи. Защо просто не записваш ид-то на усеро в сесията. Като се обвържеш с ид на сесията после ако искаш да я регенерираш ще има филм. От друга страна самото ид на усеро не е чувствителна информация и можеш да си го държиш там. Не че няма да работи по твоя начин ама си създаваш излишни усложнения в живота icon_lol.gif
PMEmail Poster
Top
saruman
Публикувано на: 27-02-2018, 17:20
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1964
Регистриран на: 21.07.10



Няма ли да е по-лесно да си напишеш функция,коята да тригерира евент,че браузера е затворен ?


--------------------
http://www.wefunkradio.com/radio/

Remember,remember the fifth of November
PMEmail Poster
Top
thrawn
Публикувано на: 27-02-2018, 17:58
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1684
Регистриран на: 17.01.17



Защо трябва потребителя да се легне отново, при положение, че е ловнат и има валидна сесия?
PMEmail Poster
Top
TrustHavic
Публикувано на: 27-02-2018, 18:25
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 379
Регистриран на: 30.04.14



HTML
$(window).unload(function () {
$.ajax({
type: "POST",
        cache: false,
        async: false,
        url:
        data:{},
        success: function(){
         }
      });
});
                  

Пробвай с това при рязко затваряне на таба

Това мнение е било редактирано от TrustHavic на 27-02-2018, 18:26
PMEmail Poster
Top
johnfound
Публикувано на: 27-02-2018, 18:30
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 6361
Регистриран на: 27.05.04



QUOTE (saruman @ 27-02-2018, 18:20)
Няма ли да е по-лесно да си напишеш функция,коята да тригерира евент,че браузера е затворен ?

Която няма да работи във всички случаи, така че пак трябва да се решава проблема откъм сървъра.

@Constantine: Въобще проблемът с триенето на старите сесии е нерешим в парадигмата на HTTP протокола. Решенията с таймери са просто кръпка от немай-къде.

А описвания проблем въобще не стои. Просто, ако се появи потребител, който представи бисквитка с валидна сесия, той се смята за логнат. Ако потребителят няма валидна бисквитка, той така или иначе минава през логин процес и ако в края на този процес се окаже, че съществува сесия за този потребител, то или сесията се преизползва с обновени полета, или се изтрива старата сесия и се създава нова. Условието да не можеш да се логнеш при наличие на сесия е безсмислено.

Пак да кажа, това е особеност на HTTP протокола - в него няма сесии като понятие и те се имитират по-добре или по-зле с бисквитките и други работи. По-нормални сесии могат да се направят, ако се смени протокола - с комбинация от WebSockets и JS. Но това решение си има други недостатъци.

Това мнение е било редактирано от johnfound на 27-02-2018, 18:31


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
Constantine
Публикувано на: 27-02-2018, 19:25
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 184
Регистриран на: 13.04.05



@johnfound

Тогава как бихте реализирали: да може да се логва само един юзер по едно време /
Allowing only one user at the time

Това мнение е било редактирано от Constantine на 27-02-2018, 19:25
PMEmail PosterUsers Website
Top
Gamma Goblin
Публикувано на: 27-02-2018, 19:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1096
Регистриран на: 21.02.18



QUOTE (Constantine @ 27-02-2018, 19:25)
@johnfound

Тогава как бихте реализирали: да може да се логва само един юзер по едно време /
Allowing only one user at the time

Само един юзър за цялото приложение ли ?


--------------------
Напред! Живота е сраженье!
Напред! И прав всегда ходи!
Напред, макар към поражение!
Ако ще паднеш, прав падни!
---
Axis of faith; Raw, and untamed in spirit
To do and undo...
We chew this world; And Spit it out
PMEmail PosterUsers Website
Top
lucky
Публикувано на: 27-02-2018, 19:38
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 519
Регистриран на: 05.08.17



Това което OP пише е мноооого често изискване при банките! Там няма "логика", протколи и лайна прочии, има си изисквания да има 1 логин по всяко едно време и толкоз. Споровете са излишни. Даже и browser refresha е забранен понякога.

Според мен има точно 1 начин с две подточки да адресираш проблема

1. дръж си крон джеба, това е ок
2. това, което ти казах - нов логин, трие всички стари сесии (т.е. 1 сесия, предишната) на съотвения катил. толкоз.

Това мнение е било редактирано от lucky на 27-02-2018, 19:41
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0