Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesje - dziwny błąd
Forum PHP.pl > Forum > PHP
MFIPETER
Otóż mam bardzo mało czasu na ukończenie pewnego projektu i nie mogę zrozumieć czemu tak się dzieje :
Przy logowaniu skrypt tworzy sesję:

Kod
        if (!isset($_SESSION['inicjuj']))
        {
            session_regenerate_id();
            $_SESSION['inicjuj'] = true;
            $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        }
        
        if($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'])
        {
            die('Próba przejecia sesji udaremniona!');      
        }
        
        $_SESSION['login'] = $_POST['nick'];
        $ip = $_SESSION['ip'];
}


I wszystko jest ok. Ale na kolejnej podstronie jest sprawdzenie :
Kod
if (empty($_SESSION['login']) || empty($_SESSION['ip'])) {
    echo "<script language = 'javascript'>window.location.href = 'error.php?e=4'</script>";
}


I tu przekierunkowuje na error.php. session_start(); jest na początku skryptu. Proszę o szybką odpowiedź co może to powodować i jak temu zaradzić.

Dodałem nową podstronę i za pierwszym razem wszystko było ok. Sesja działała. Ale jak wyłączyłem przeglądarkę to już wyskakuje błąd, że nie ma sesji. Czy może po sesji nie zostają jakieś śmieci ?
Babcia@Stefa
Myślę że użyłeś innego operatora niż trzeba.

  1. <?php
  2. if($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'])
  3. ?>


A być może powinno być:
  1. <?php
  2. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  3. ?>


Dziękuję, Babcia@Stefa
MFIPETER
Nie nie o to chodzi. Jesli komuś to pomoże to podaję cały skrypt :

Kod
<?php

require_once('includes/sessions.php');
require_once 'libs/Smarty.class.php';
require_once ('includes/config.php');

$smarty = new Smarty;

$smarty-> compile_check = true;

$db -> LogSQL();

/**
* Logowanie do gry, ustawianie sesji
*/
if (isset ($_POST['pass']) && $title == 'Start')
{
    // Sprawdzanie czy nick i hasło są wpisane
    if (!$_POST['nick'] || !$_POST['pass'])
    {
        $error = "Nie logowano się. Aby się zalogować wróć na stronę główną i wpisz dane do pola z nickiem oraz hasłem.";
        $smarty -> assign("error", $error);
        $smarty -> display("error.tpl");
        exit;
    }
    
    $user = $_POST['nick'];
    $pass = MD5($_POST['pass']);
    $zapytanie = $db -> Execute("SELECT id, login FROM users WHERE login='".$user."' AND pass='".$pass."'");
    $logres = $zapytanie -> RecordCount();

    if ($logres <= 0)
    {
        $error = "Konto nie istnieje lub podane dane są nieprawidłowe. Jeżeli jesteś pewny, ze wpisujesz poprawne dane, to Twoje konto mogło zostać usunięte. Po więcej informacji napisz do administracji.";
        $smarty -> assign("error", $error);
        $smarty -> display("error.tpl");
        exit;
    }
    
    $zapytanie -> Close();
    $intCtime = time() - 180;
    $objQuery = $db -> Execute("SELECT count(*) FROM users WHERE rank!='Admin' AND rank!='Sztab' AND lpv>=".$intCtime);
    $numo = $objQuery -> fields['count(*)'];
    $objQuery -> Close();
    
    $zapytanie = $db -> Execute("SELECT isactive FROM users WHERE login='".$user."'");
    $logres = $zapytanie -> RecordCount();
    
    // Sprawdzenie czy konto gracza jest aktywne
    if ($logres <= 0)
    {
        $error = "Twoje konto nie jest aktywne. Żeby móc się zalogować musisz aktywować konto za pomocą linku, który został do Ciebie wysłany mailem.";
        $smarty -> assign("error", $error);
        $smarty -> display("error.tpl");
        exit;
    
    }
    $zapytanie -> Close();
    
    // Sprawdzenie czy jest zalogowane więcej niż 500 graczy (nie dotyczy adminów, sztabu i oficerów)
    if ($numo >= 500 && $query -> fields['rank'] != 'Admin' && $query -> fields['rank'] != 'Sztab' && $query -> fields['rank'] != "Oficer")
    {
        $error = "Niestety ale z powodu limitu transferu w grze może przebywać maksymalnie 500 graczy.";
        $smarty -> assign("error", $error);
        $smarty -> display("error.tpl");
        exit;
    }
    $_SESSION['nick'] = $_POST['nick'];
    $_SESSION['pass'] = $_POST['pass'];
}

/**
* W razie końca sesji
*/
if (empty($_SESSION['nick']) || empty($_SESSION['pass']))
{
    $error = 'Niestety, ale prawdopodobnie zbyt długo byłeś nieaktywny na koncie i zostałeś automatycznie wylogowany. Może to być jednak błąd z naszej strony. Jeśli kilka razy próbujesz i nie możesz się zalogować ponieważ wyświetla się ten komunikat, napisz do administracji !';
    $smarty -> assign("error", $error);
    $smarty -> display("error.tpl");
    exit;
}

$pass = MD5($_SESSION['pass']);

$stat = $db -> Execute("SELECT id FROM users WHERE login='".$_SESSION['nick']."' AND pass='".$pass."'");

// Konto gracza nie istnieje
if (!$stat -> fields['id'])
{
    $error = 'Twoje konto nie istnieje. Żeby móc się zalogować musisz się najpierw zarejestrować !';
    $smarty -> assign("error", $error);
    $smarty -> display("error.tpl");
    exit;
}

$ctime = time();
$ip = $_SERVER['REMOTE_ADDR'];
$title = strip_tags($title);
$db -> Execute("UPDATE users SET lpv=".$ctime.", ip='".$ip."', page='".$title."' WHERE id=".$stat -> fields['id']);


?>


Jest includowany przez każdy plik, który jest po zalogowaniu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.