首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP 5中的会话处理

PHP 5中的会话处理
EN

Stack Overflow用户
提问于 2012-01-24 10:37:21
回答 5查看 3.5K关注 0票数 2

我在php会话处理中遇到了一个问题,我无法向自己解释。我正在从头开始学习php,我不知道如何实现一个会话的实况:

这是我的索引页面,用户可以登录或注册到访问正确页面的数据库,然后返回查看他是否已登录:

代码:

代码语言:javascript
复制
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”

但是,当我单击链接以获取登录页面,或者再次从索引页面注册页面时,我应该得到相同的消息,"Logged as.“,但是会话似乎被关闭了。:(

这里是login.php:

代码语言:javascript
复制
<?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“

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-24 11:05:35

你给unset($_SESSION['login'])打了很多次电话。它移除您的登录:

代码语言:javascript
复制
<form method="post" action="<?php unset($_SESSION['login']) ?>">

试试这个:

代码语言:javascript
复制
<form method="post" action="index.php">
<input type="button" name="logOut" value="LogOut" />
</form>

<? if (isset($_REQUEST['logOut'])){ session_destroy(); } ?>
票数 3
EN

Stack Overflow用户

发布于 2012-01-24 11:04:45

取消会话,如下所示

代码语言:javascript
复制
if(isset($_REQUEST['logOut']))
{
   unset($_SESSION['login']);
}
票数 1
EN

Stack Overflow用户

发布于 2012-01-24 10:55:20

你去查一下if(isset($_SESSION['login']))。如果这导致了true,那么您可以使用<form method="post" action="<?php unset($_SESSION['login']) ?>">

注意unset($_SESSION['login'])部分-在此之后,if(isset($_SESSION['login']))将返回false

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8985345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档