Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sesje - dziwny błąd
MFIPETER
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.01.2008
Skąd: Kraków

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


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 ?

Ten post edytował MFIPETER 15.07.2008, 21:53:37
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
MFIPETER
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 19.01.2008
Skąd: Kraków

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


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.

Ten post edytował MFIPETER 16.07.2008, 19:58:49
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 12:34