gpt4 book ai didi

php - 如何让用户保持登录状态,直到他们注销或关闭浏览器

转载 作者:行者123 更新时间:2023-12-02 07:38:49 25 4
gpt4 key购买 nike

下面我有 3 个 php 脚本,顺序是从用户登录到存储登录详细信息然后注销。现在我正在做的是,我正在使用 $SESSION 来确定哪个用户已登录,然后使用 session_gcmaxlife 添加额外的时间,以便 session 不会在 12 小时内过期。因此,这意味着用户可以保持登录状态 12 小时,超过该时间后它将自动注销用户。这只是制作登录系统的一个非常基本的原因。

但我想要做的是能够让用户无限期地登录,直到他们点击注销链接或关闭浏览器。我的问题是,在尽可能减少代码更改的情况下,如何更改下面的代码,以便让用户保持登录状态,直到他们注销或关闭浏览器?

这是否可以通过最少的代码更改来完成,我展示 5 个 php 脚本的原因是这样我可以看到每个不同的脚本需要进行哪些更改,这样我就应该能够对其他脚本进行更改在应用程序中。

能否请您展示示例代码,以便我了解如何以及在何处进行更改。

下面是用于显示当前正在发生的事情的 php 脚本:

  1. teacherlogin.php(这是用户输入登录详细信息以登录应用程序的脚本)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php

// connect to the database
include('connect.php');
include('member.php');

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
die();
}

// required variables (make them explciit no need for foreach loop)
$teacherusername = (isset($_POST['teacherusername'])) ? $_POST['teacherusername'] : '';
$teacherpassword = (isset($_POST['teacherpassword'])) ? $_POST['teacherpassword'] : '';
$loggedIn = false;
$active = true;

if ((isset($username)) && (isset($userid))){
echo "You are already Logged In: <b>{$_SESSION['teacherforename']} {$_SESSION['teachersurname']}</b> | <a href='./menu.php'>Go to Menu</a> | <a href='./teacherlogout.php'>Logout</a>";
}
else{

if (isset($_POST['submit'])) {

$teacherpassword = md5(md5("g3f".$teacherpassword."rt4"));

// don't use $mysqli->prepare here
$query = "SELECT TeacherId, TeacherForename, TeacherSurname, TeacherUsername, TeacherPassword, Active FROM Teacher WHERE TeacherUsername = ? AND TeacherPassword = ? LIMIT 1";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("ss",$teacherusername,$teacherpassword);
// execute query
$stmt->execute();
// get result and assign variables (prefix with db)
$stmt->bind_result($dbTeacherId, $dbTeacherForename,$dbTeacherSurname,$dbTeacherUsername,$dbTeacherPassword, $dbActive);

while($stmt->fetch()) {
if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
if ($dbActive == 0) {
$loggedIn = false;
$active = false;
echo "You Must Activate Your Account from Email to Login";
}else {
$loggedIn = true;
$active = true;
$_SESSION['teacherid'] = $dbTeacherId;
$_SESSION['teacherusername'] = $dbTeacherUsername;
}
}
}

if ($loggedIn == true){
$_SESSION['teacherforename'] = $dbTeacherForename;
$_SESSION['teachersurname'] = $dbTeacherSurname;
header( 'Location: menu.php' ) ;
die();
}

if (!$loggedIn && $active && isset($_POST)) {
echo "<span style='color: red'>The Username or Password that you Entered is not Valid. Try Entering it Again</span>";
}

/* close statement */
$stmt->close();

/* close connection */
$mysqli->close();
}
?>

<强>2。 member.php(此脚本包含 $SESSION 变量以确定哪个用户已登录。这是一个非常重要的脚本并且被包含(使用 `include(member.php) 能够确定用户是否已经登录)

<?php

if (isset($_SESSION['teacherforename'])) {

$_SESSION['teacherforename'] = $_SESSION['teacherforename'];

}

if (isset($_SESSION['teachersurname'])) {

$_SESSION['teachersurname'] = $_SESSION['teachersurname'];

}

if (isset($_SESSION['teacherid'])) {

$userid = $_SESSION['teacherid'];

}

if (isset($_SESSION['teacherusername'])) {

$username = $_SESSION['teacherusername'];

}

?>

3 teacherlogout.php (最后这是注销页面,当用户点击一个注销链接(此时只显示在menu.php中)然后它会转到这个页面它显示一条消息并通过销毁 session 执行注销)

<?php

ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');
require_once 'init.php';

ini_set('display_errors',1);
error_reporting(E_ALL);


session_start();

?>

</head>

<?php

include('member.php');

?>

<body>

<?php

if ((isset($username)) && (isset($userid))){
session_destroy();
echo "You have been Logged Out | <a href='./home.php'>Home</a>";
}

else {

echo "You are Not Logged In";

}

?>

</body>
</html>

最佳答案

不客气,但您似乎并不了解 session 和 cookie 的正确工作原理。与其贴 5 页没人会看的代码,不如自己尝试解决问题,通过研究 session + cookie 来学习一些东西?如果有人给了您答案,如果您不了解其背后的概念,您将一无所获。

http://us3.php.net/manual/en/session.idpassing.php

http://us3.php.net/cookies

http://www.tuxradar.com/practicalphp/10/0/0

也@see destroy session on window close?

关于php - 如何让用户保持登录状态,直到他们注销或关闭浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com