Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Komunikat przy zalogowanym drugim uzytkowniku
rad11
post
Post #1





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Chcialbym sie was poradzic jak rozwiazac problem takiego typu ze mam logowanie na jedno konto moze sie zalogowac wielu uzytkownikow w tej chwili chce to ograniczyc do tego aby jesli uzytkownik jest juz zalogowany to logujacemu nowemu uzytkownikowi wyskakiwal komunikat ze juz ktos jest zlaogowany na tym koncie , a temu co jest zalogowany komunikat ze ktos probuje sie zalogowac. Jakies pomysly jak taki problem rozwiazac?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zapisuj w bazie kto jest aktualnie zalogowany i jak ktos sie bedzie probowal logowac to sprawdzaj czy juz jest w bazie czy nie.
Go to the top of the page
+Quote Post
ikssde
post
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

Ostrzeżenie: (0%)
-----


Musisz mieć informację czy użytkownik się wylogował albo czy po prostu przerwał sesję, więc przy każdej odsłonie powinieneś wrzucać do bazy danych rekord, że zalogowany użytkownik jest aktywny.
Potem będziesz mógł sprawdzić kiedy była ostatnia aktywność i jeśli to było np. 15 minut temu (ważności sesji) to możesz stwierdzić, że ktoś po prostu zamknął przeglądarkę bez wylogowywania się i nie ma go na koncie.

W osobnej tabeli powinieneś trzymać informacje o próbach logowania.

Ten post edytował ikssde 23.03.2015, 09:04:12
Go to the top of the page
+Quote Post
rad11
post
Post #4





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A jak rozwiazac problem zwiazany z wygasnieciem sesji, a istnieniem rekordu ze niby uzytkownik jest zalogowany?
Go to the top of the page
+Quote Post
snerf
post
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


No proste ify? Z czym masz dokładniej problem. Napisz kod i zapytaj.

Tutaj moje rozwiązanie:
  1. public function check($ost_activ)
  2. {
  3. if(!empty($_SESSION['user_id']) && !empty($_SESSION['owner_ses'])){
  4. $timeout = $this->timeout;
  5. $owner_ses = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
  6.  
  7. if ((isset($_SESSION['last_active']) && $_SESSION['last_active']<(time()-$timeout))
  8. || (isset($_SESSION['owner_ses']) && $_SESSION['owner_ses']!=$owner_ses))
  9. {
  10. setcookie(session_name(), '', time()-3600, '/');
  11. header('Location: /index.html');
  12. }else{
  13. $_SESSION['last_active'] = time();
  14. $_SESSION['owner_ses'] = $owner_ses;
  15. if($ost_activ < time()){
  16. $this->last_visit_time = time()+$this->timeout_active;
  17. $pdo = $this->pdo;
  18. $stmt = $pdo -> prepare('UPDATE `'.$this->prefix_mysql.users.'` SET `time_activ` = :date WHERE `id` = :user_id AND `session_key` = :seskey');
  19. $stmt -> bindValue(':date', $this->last_visit_time, PDO::PARAM_INT);
  20. $stmt -> bindValue(':seskey', $owner_ses, PDO::PARAM_STR);
  21. $stmt -> bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT);
  22. $stmt->execute();
  23. }
  24. }
  25. }
  26. }
Go to the top of the page
+Quote Post
ikssde
post
Post #6





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

Ostrzeżenie: (0%)
-----


Cytat
A jak rozwiazac problem zwiazany z wygasnieciem sesji, a istnieniem rekordu ze niby uzytkownik jest zalogowany?


Przecież napisałem jak to rozwiązać, przeczytaj poprzedni post.

Ten post edytował ikssde 23.03.2015, 11:46:59
Go to the top of the page
+Quote Post
rad11
post
Post #7





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Mam taki kod (nie moj) w ktorym musze wcisnac warunek aby blokowac innego uzytkownika ktory probuje sie zalogowac:

login
  1. function login($showform = true, $redir = '/monitor') {
  2. global $_aa, $_prefix, $lg;
  3. $_aa['logged_in'] = false;
  4. // If login data present, check the key
  5. if (isset($_COOKIE['aausr'])) {
  6. $id = @intval($_COOKIE['aausr']);
  7.  
  8. if ("$id" == $_COOKIE['aausr']) {
  9.  
  10. $row = mysql_fetch_assoc(make_user_query('try_db_query', "SELECT * FROM <TABLE_USER> WHERE `id`='$id' LIMIT 1"));
  11. //print_r($row);
  12. if (is_array($row) && ($row['key'] == $_COOKIE['aakey'])) {
  13. if ($row['license_id'] > 0) {
  14. $_aa['logged_in'] = ($row['key'] == make_user_query('db_getv', "SELECT * FROM <TABLE_USER> WHERE `id`='" . ($row['license_id']) . "' LIMIT 1"));
  15. } else
  16. $_aa['logged_in'] = true;
  17.  
  18. if ($_aa['logged_in']) {
  19. $_aa = array_merge($_aa, $row);
  20. $security->setLogged($row);
  21. }
  22. }
  23. }
  24. }
  25. // If not logged in, display form
  26. if (!$_aa['logged_in']) {
  27.  
  28. if ($_POST['s'] == 'login') {
  29. $_POST['login'] = trim($_POST['login']);
  30. $_POST['pass'] = trim($_POST['pass']);
  31. //echo "CHeck";
  32. $res = loginCheck($_POST);
  33. //print_r($res);
  34.  
  35. if ($res['ok'] == 1) {
  36.  
  37. if ($res['active'] != 3) {
  38. setcookie('aausr', $res['id'], 0, '/');
  39. setcookie('aakey', $res['key'], 0, '/');
  40.  
  41. if (!$_COOKIE['pcid']) {
  42. srand(time());
  43. $_COOKIE['pcid'] = md5('dasdas' . rand());
  44. setcookie('pcid', $_COOKIE['pcid'], time() + 1500 * 24 * 3600, '/');
  45. }
  46. $security->setLogged($res['row']);
  47. }
  48.  
  49. $_aa['logged_in'] = true;
  50. unset($res['ok']);
  51. unset($res['row']);
  52. $_aa = array_merge($_aa, $res);
  53.  
  54. // Update last and current visit times, to enable tracking of new and old results
  55. make_user_query('try_db_query', $sql = "UPDATE <TABLE_USER> SET `last_visit`='{$_aa['curr_visit']}', `curr_visit`='" . time() . "' WHERE `id`='{$_aa['id']}'");
  56.  
  57. if ($_aa['license_id'] > 0)
  58. make_user_query('try_db_query', $sql = "UPDATE <TABLE_USER> SET `key`='" . $res['key'] . "' WHERE `id`='{$_aa['license_id']}'");
  59.  
  60. make_user_query('try_db_query', "INSERT INTO <TABLE_EVENTS> VALUES ('',
  61. '{$_aa['id']}',
  62. NOW(),
  63. 'login',
  64. '" . addslashes($_SERVER['REMOTE_ADDR']) . "',
  65. '" . addslashes($_COOKIE['pcid']) . "')");
  66.  
  67. $_aa['last_visit'] = $_aa['curr_visit'];
  68.  
  69. }
  70. } else
  71. $res = array();
  72.  
  73.  
  74. }
  75.  
  76. if ($_aa['logged_in'] && strlen($redir) > 0) {
  77. header('Location: ' . $redir);
  78. die();
  79. } else
  80. return true;
  81.  
  82.  
  83. }


logout

  1. function logout($logged_in) {
  2.  
  3. global $lg, $_aa;
  4.  
  5. // if ($logged_in == true) {
  6. // die();
  7. // } else {
  8. if (setcookie('aausr', '0', time() - 24 * 3600, '/') && setcookie('aakey', '')) {
  9.  
  10. $_aa['logged_in'] = false;
  11. unset($_COOKIE['aausr']);
  12. $security->setAuthenticated(false);
  13. $security->clear();
  14. header("Location: /");
  15. die();
  16.  
  17. containerStart(true);
  18.  
  19. return message($lg['logged_out'], $lg['logged_out_explain']);
  20. }
  21. // }
  22. }


Niby w bazie jest trzymany last visit current visit ale jak zablokowac na tej podstawie probe logowania innego uzytkownika hmmm?

Ten post edytował rad11 23.03.2015, 12:09:17
Go to the top of the page
+Quote Post
snerf
post
Post #8





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----



1. zapisać czas + 15 minut

if czy jestem w sesji //typowa funkcja check jak podałem wyżej
//tak
else

if time() > $czas_z_bazy
//Niemoge sie zalogowac poniewaz ktos jest jeszcze zalogowany
else
//zaloguj + zapisz czas +15
//tworzy sesje
Go to the top of the page
+Quote Post
com
post
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


ikssde jak już to update a nie nowe rekordy bo zaraz wygeneruje ich sobie tysiące (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:01