PHP会话第2部分

时间:2014-12-12 03:25:10

标签: php

继续PHP - index.php and session

  • 的login.php

    <?php
    session_start();
    
    if(isset($_POST['submit']))
    {
    $usrname = $_POST['username'];
    $usrpassword = $_POST['password'];
    
    if(!empty($usrname) && (!empty($usrpassword)))
    {
        //db configuration
        $query = "select username from user where username = '".$usrname."' &&    
        userpwd = PASSWORD('$usrpassword')";
        $result = $mysqli -> query($query);
    
        if($result -> num_rows)
        {
            $row = $result -> fetch_assoc(); 
            session_regenerate_id();          
            $_SESSION['username'] = $row['username'];
            session_write_close();
    
            header("Location: index.php");
            exit();
        }
    }
    }
    ?>
    
    <html>
    <head></head>
    
    <body>
    <form action="" method="post">
        Username: <input type="text" name="username" /><br />
        Password: <input type="password" name="password" /><br />
        <input type="submit" name="submit" value="Login" />
    </form>
    </body>
    </html>
    
  • 的index.php

    <?php
    session_start();
    if(!isset($_SESSION['username']))
    {
        header("Location: login.php");
        exit();
    }
    ?>
    <html>
    <head></head>
    <body>
    <p>Main Page</p>
    <p>Hello, <?php echo $_SESSION['username'];?></p>
    <a href="logout.php">Log out</a>
    </body>
    </html>
    
  • logout.php

    <?php
    session_start();
    
    if(isset($_SESSION))
    {
    $_SESSION = array();
    session_destroy();
    
    header("Location: login.php");
    exit();
    }
    ?>
    
  • 从上面的代码中,当我关闭浏览器并再次打开它时,它会起作用。

  • 现在我的问题如下:
    - &GT;我打开2个标签,一个是维基百科,另一个是我的项目 - &GT;当我去我的项目。我将先登录login.php进行登录。
    - &GT;成功登录后,将显示index.php页面 - &GT;然后我关闭我的项目,只保留维基百科 - &GT;后来我打开其他标签再次打开我的项目。当我在另一个标签上打开我的项目时,必须位于login.php而不是index.php。

  • 是否可以在多个标签上执行此操作?

1 个答案:

答案 0 :(得分:2)

基本上:不。没有明确的 on-window-close-discard-cookie 事件,它在所有情况下都适用于所有浏览器。浏览器在丢弃cookie时变得更加宽容。 加载页面,等待一段时间,单击指向另一个页面的链接加载页面,关闭选项卡,再次加载同一页面之间没有区别。关闭选项卡或浏览器窗口与登录状态无关,而不是暂时不执行任何操作。如果您导航到外部链接然后单击后退按钮怎么办?这应该算作注销,而不仅仅是关闭标签吗?如果是这样的话:为什么?

HTTP是无状态媒体。唯一真正重要的是加载一个页面和加载下一个页面之间的时间,这就是cookie /会话超时实际上所指的内容。你在这两个事件之间做的其他事情几乎无关紧要。