Witam bardzo serdecznie mój problem polega na takiej zasadzie, że sesja zalogowanego użytkownika zbyt szybko wygasa. Problem dotyczy mojej przeglądarkowej gry. Gracz jest zalogowany i np wyłączy przeglądarkę lub wyjdzie z gry bez wylogowania po ponownym wejściu do gry przy zalogowaniu otrzymuje komunikat "Twoja sesja wygasła" a przecież się loguje na nowo. Kolejny problem to taki, że gracz jest zalogowany zamknę przeglądarkę na nowo ją uruchomię wejdę na grę jakaś podstrona i również komunikat,że "Twoja sesja wygasła". Kieruje do Was prośbę o to abyście mi pomogli. Oczekuję od Was pomocy takiej aby sesja w grze była trwała bez przerwania jedynie poprzez wylogowanie. Chodzi mi o to, że gracz się loguje wychodzi z gry zamyka przeglądarkę przychodzi za jakiś czas i znów ma zalogowane konto.
Tutaj mam kod logowania gracza:
if(isset($_POST['loguj'])){ //Sprawdzamy, czy submit został wciśnięty $haslo = sha1($_POST['pass']);
$zapytanie = $pdo->query("SELECT * FROM ustawienia");
$zap = $zapytanie->fetch();
$sprawdz = $pdo->prepare("SELECT * FROM uzytkownicy WHERE email=:email AND pass=:pass");
$sprawdz->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
$sprawdz->bindValue(':pass', $haslo, PDO::PARAM_STR);
$sprawdz->execute();
$gracz = $sprawdz->fetch();
if(empty($_POST['email']) OR
empty($_POST['pass'])){
<script type='text/javascript'>window.alert('Uzupełnij wszystkie dane');document.location.href = 'index.php';</script>
";
}elseif($zap['logowanie'] == 1 AND $gracz['ranga'] != 'Administrator'){
<script type='text/javascript'>window.alert('Trwają prace nad grą w najbliższym czasie zostanie ona uruchomiona');document.location.href = 'index.php';</script>
";
}elseif($gracz['aktywny'] == 0){
<script type='text/javascript'>window.alert('Musisz aktywować konto');document.location.href = 'index.php';</script>
";
}else{
//Usuwamy białe znaki z przesłanych danych
$login = trim($_POST['email']); $password = trim($_POST['pass']); //Kodujemy hasło - przy rejestracji również je zakodowaliśmy, wiec przy porównywaniu musi być zakodowane
$password = sha1($password);
//Sprawdzamy czy użytkownik o podanych danych istnieje
$stmt = $pdo->prepare("SELECT * FROM uzytkownicy WHERE email=:email AND pass=:password");
$stmt->bindValue(":email", $login, PDO::PARAM_STR);
$stmt->bindValue(":password", $password, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount()!=0){
'cookie_lifetime' => 3600,
'read_and_close' => true,
]);
$_SESSION['gracz'] = $_POST['email'];
$data = date("Y-m-d H:i:s");
$log = "Zalogowano na konto";
$dodaj = $pdo->prepare("INSERT INTO `logi_gracze` (gracz, data, log, IP) VALUES(:gracz, :data, :log, :IP)");
$dodaj->bindValue(":gracz", $gracz['id'], PDO::PARAM_INT);
$dodaj->bindValue(":data", $data, PDO::PARAM_STR);
$dodaj->bindValue(":log", $log, PDO::PARAM_STR);
$dodaj->bindValue(":IP", $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$dodaj->execute();
echo '<meta http-equiv="Refresh" content="1; url=gra.php" />';
<script type='text/javascript'>window.alert('Zalogowano na konto');document.location.href = 'gra.php';</script>
";
/*
* Tworzymy sesję dla zalogowanego użytkownika z:
* - informacją, że użytkownik jest zalogowany
* - jego id
*/
}
else{
<script type='text/javascript'>window.alert('Złe dane');document.location.href = 'index.php';</script>
";
form();
}
}
}
A tutaj kod który nas wyrzuca za brak sesji:
'cookie_lifetime' => 3600,
'read_and_close' => true,
]);
if(empty($_SESSION['gracz'])){ echo("<script type='text/javascript'>window.alert('Twoja sesja wygasła zaloguj się ponownie');document.location.href = 'index.php';</script>");
}
Bardzo proszę o pomoc.
Pozdrawiam i czekam na odpowiedź