Обработка сессий в PHP 5 - PullRequest
       12

Обработка сессий в PHP 5

2 голосов
/ 24 января 2012

У меня проблема с обработкой php-сессии, которую я не могу объяснить самому себе.Я изучаю php с нуля и не могу понять, как поддерживать сеанс вживую:

Это моя страница указателя, где пользователь может войти или зарегистрироваться в базе данных, посетив нужную страницу, изатем вернитесь, чтобы увидеть, вошел ли он в систему:

Код:

Index

    <?php session_start(); ?>

     <a href="register.php" target="_self"> Register </a> 

     <a href="login.php" target="_self"> Login </a>


 <?php

if(isset($_SESSION['login']))
    {
        echo "Logged as: ".$_SESSION['nlogin'];

?>
     <form method="post" action="<?php unset($_SESSION['login']) ?>">
     <input type="button" name="logOut" value="LogOut" />
     </form>

<?php
    }
    else
    {
    echo "Please Register or Login";
    }
    ?>

На самом деле это работает, потому что, когда я возвращаюсь из login.php, он говорит: «Зарегистрирован как: Admin»

Но когда я нажимаю на ссылку, чтобы получить страницу входа в систему, или снова регистрируюсь на странице индекса, я получаю то же самое сообщение «Зарегистрировано как ...», но сессия кажется закрытойвместо.: (

вот login.php:

<?php


session_start(); 

include "dbConnect.php";

if(isset($_SESSION['login']))
    {
        echo "Logged as: ".$_SESSION['nlogin']; // IT NEVER SHOW THIS MESSAGE
    }

if(isset($_POST['submit']) &&(trim($_POST['submit']) == "Login"))
    {
        if(!isset($_POST['user']) || $_POST['user']=="")
        {
            echo "Attenzione inserire l'username.";
        }
        elseif(!isset($_POST['pwd'])||$_POST['pwd']=="")
        {
            echo "Attenzione inserire la password.";
        }
        else
        {
            $u = trim(filter_var($_POST['user'], FILTER_SANITIZE_STRING));
            $u = str_replace(" ","_",$u);
            $p = trim(filter_var($_POST['pwd'], FILTER_SANITIZE_STRING));
            $p = sha1($p);

            $istance = new dbHandle;
            $istance->connect(); 
            $data = $istance->query("SELECT * FROM login WHERE username_login = '$u' AND password_login = '$p'");
            if(mysql_num_rows($data) == 0)
            {
                echo "Failed";


                echo "<a href='index.php' target='_self'> Go Back </a>";
            }
            else
            {
                echo "Logged";
                $res = $istance->getdata($data);
                $_SESSION['login'] = $res->id_login;
                $_SESSION['nlogin'] = $res->username_login; 



                echo "<a href='index.php' target='_self'> Go Back </a>";

            }
        }
    }
    else
    {
    ?>
        Login


        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            ...
                   <input name="user" type="text" size="20" required="required"/>
            ...
                   <input name="pwd" type="password" size="20" required="required"/>
            ...
                   <input type="submit" name="submit" value="Login"/>  
        </form>


         <form method="post" action="<?php unset($_SESSION['login']) ?>">
         <input type="button" name="logOut" value="LogOut" />
         </form>

  <?php
    }
    $istance->disconnect();
?>

Когда я возвращаюсь по ссылке выше «Вернуться назад» на страницу индекса, отображается «Зарегистрированные как ... но когда я прихожу»здесь снова, это не так.

Итак, я предполагаю, что моя сессия была уничтожена автоматически? но почему?

Спасибо, я ценю вашу помощь.

Я забыл сказать, чтоPHP.ini имеет

session.cookie_lifetime

, установленный в "0"

Спасибо

Ответы [ 5 ]

3 голосов
/ 24 января 2012

Вы звоните unset($_SESSION['login']) много раз. Это удалит ваш логин:

<form method="post" action="<?php unset($_SESSION['login']) ?>">

Попробуйте это:

<form method="post" action="index.php">
<input type="button" name="logOut" value="LogOut" />
</form>

<? if (isset($_REQUEST['logOut'])){ session_destroy(); } ?>
1 голос
/ 24 января 2012

сбросить сессию, как показано ниже

if(isset($_REQUEST['logOut']))
{
   unset($_SESSION['login']);
}
0 голосов
/ 24 января 2012

Я не думаю, что сессия была разрушена! Сначала я бы удалил все пустые строки между открывающими тегами для php и session_start (). Проверьте это снова, и вы можете добавить строку error_reporting (E_ALL); ниже session_start, чтобы увидеть, возвращаются ли вам какие-либо сообщения об ошибках (ed). В вашем PHP.ini что session.cookie_lifetime = 0 означает, что сеанс остается активным до тех пор, пока браузер остается открытым. Уничтожается только когда браузер закрыт. Я надеюсь, что это помогает

0 голосов
/ 24 января 2012

Обзор сеанса:

<?php
// Always Start our session
session_start();

$_SESSION['username'] = 'Saurabh Singh'; 

$username =  $_SESSION['username'];

echo $username;

if(isset($_SESSION['username']))
{
    Do your action
}
else
{
    echo "Please Register or Login";

}

0 голосов
/ 24 января 2012

Вы проверяете на if(isset($_SESSION['login'])). Если это приводит к true, вы делаете <form method="post" action="<?php unset($_SESSION['login']) ?>">

Обратите внимание на часть unset($_SESSION['login']) - после этого if(isset($_SESSION['login'])) вернет false.

...