Php 如何让用户一直登录到注销或关闭浏览器
下面我有3个php脚本,从用户登录到存储登录详细信息,再到注销。现在我正在做的是,我使用Php 如何让用户一直登录到注销或关闭浏览器,php,session,cookies,Php,Session,Cookies,下面我有3个php脚本,从用户登录到存储登录详细信息,再到注销。现在我正在做的是,我使用$SESSION确定哪个用户登录,然后使用SESSION\gcmaxlife添加额外的时间,以便会话不会在12小时内过期。因此,这意味着用户可以保持登录12小时,在这段时间后,它将自动注销用户。这只是生成登录系统的一个非常基本的原因 但我想做的是能够让用户无限期地登录,直到他们单击注销链接或关闭浏览器。我的问题是,在代码更改量尽可能少的情况下,如何更改下面的代码,使用户在注销或关闭浏览器之前保持登录 这可以在
$SESSION
确定哪个用户登录,然后使用SESSION\gcmaxlife添加额外的时间,以便会话不会在12小时内过期。因此,这意味着用户可以保持登录12小时,在这段时间后,它将自动注销用户。这只是生成登录系统的一个非常基本的原因
但我想做的是能够让用户无限期地登录,直到他们单击注销链接或关闭浏览器。我的问题是,在代码更改量尽可能少的情况下,如何更改下面的代码,使用户在注销或关闭浏览器之前保持登录
这可以在代码更改最少的情况下完成吗?我之所以展示5个php脚本,是因为我可以看到每个不同的脚本需要进行哪些更改,这样我就可以在应用程序中对其他脚本进行更改
你能不能给我一个示例代码,这样我就可以看到如何以及在哪里进行更改了
以下是php脚本,以显示当前发生的情况:
不要粗鲁,但你似乎不明白会话和cookie是如何正确工作的。与其粘贴5页没有人会看到的代码,为什么不尝试自己解决这个问题,通过研究会话+cookies来学习一些东西呢?如果有人给你答案,如果你不理解背后的概念,你将一无所获
另外@see我将查看链接,我发布5个php脚本的原因是您可以查看我的代码,并查看是否需要进行任何重大更改。我将限制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();
}
?>
<?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'];
}
?>
<?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>