的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。
答案 0 :(得分:2)
基本上:不。没有明确的 on-window-close-discard-cookie 事件,它在所有情况下都适用于所有浏览器。浏览器在丢弃cookie时变得更加宽容。 加载页面,等待一段时间,单击指向另一个页面的链接和加载页面,关闭选项卡,再次加载同一页面之间没有区别。关闭选项卡或浏览器窗口与登录状态无关,而不是暂时不执行任何操作。如果您导航到外部链接然后单击后退按钮怎么办?这应该算作注销,而不仅仅是关闭标签吗?如果是这样的话:为什么?
HTTP是无状态媒体。唯一真正重要的是加载一个页面和加载下一个页面之间的时间,这就是cookie /会话超时实际上所指的内容。你在这两个事件之间做的其他事情几乎无关紧要。