当用户登录时,从会话中检索数据的第一页就可以了。当我转到另一页时,会话为空白。
我发现,当用户登录并获得第一个用户页面card.php时,会话ID会更改。例如,当进入subscription.php时,由于任何原因会话ID都会不同。
我试图在下面列出有用的代码:
log-user-in.php:
<?
session_start();
include('includingThis.php');
unset($_SESSION["emaillogin"]);
// Sørg for at e-mailen er undercased
$email = addslashes($_POST[email]);
$password = addslashes($_POST[pass]);
if ($email == "" || $password == "") {
header("Location: login.php?e=3");
exit;
die();
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
header("Location: login.php?e=4");
exit;
die();
}
$email = strtolower($email);
// TJEK OM BRUGEREN FINDES
if ($stmt = $con->prepare("SELECT email, pass, uid, profilepic, paid FROM stnd_users WHERE email=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($em, $pa, $u, $pp, $pai);
// Loop through each row in the result set
while ($stmt->fetch()) {
$gottenEmail = $em;
$gottenPass = $pa;
$uid = $u;
$profile_pic = $pp;
$paid = $pai;
}
$stmt->close();
}
if ($gottenEmail == "" || $gottenPass == "") {
header("Location: login.php?e=5");
exit;
die();
}
if (password_verify($password, $gottenPass)) {
// BRUGER LOGGES IND
// NÅR BRUGEREN FINDES, OG KODEN ER KORREKT
if ($uid != "") {
$_SESSION["user"] = $uid;
if ($paid == "true") {
// Bruger har betalt
if ($profile_pic == "true") {
header("Location: user/card.php");
exit;
} else {
header("Location: user/profilepic.php");
exit;
}
} else {
// Bruger har IKKE betalt
header("Location: user/inactive.php");
exit;
}
} else {
//DER ER SKET EN FEJL, INTET UID
header("Location: login.php?e=6");
exit;
die();
}
} else {
//Oplysningerne er ikke korrekte, har du tastet rigtigt?
// (Kode ikke korrekt)
header("Location: login.php?e=5");
exit;
die();
}
?>
答案 0 :(得分:1)
在header
重定向之后,使用exit();
结束当前脚本
也许您错过了此答案中的某些内容:
PHP session lost after redirect
您还可以在此处查看详细的会话状态:
Check if PHP session has already started
https://www.w3schools.com/php/php_sessions.asp
或者,正如Rikudou_Sennin所指出的那样,在定义或访问会话变量之前,您必须在php行session_start();
的某个地方意外地省略了它。
答案 1 :(得分:0)
1st如果用户名和密码的用户输入与带有$ _SESSION的数据库记录匹配,则应该保存要进一步使用的用户凭据
include("..\includefiles\db.php");
$email =$_POST["email"];
$password = $_POST["password"];
$sql = "SELECT * FROM member WHERE email ='$email' AND password = '$password'";
$result = mysqli_query ($con,$sql);
if($row = mysqli_fetch_array($result)){
$_SESSION['ID'] = $row['id'];
$_SESSION['NAME'] = $row['name'];
$_SESSION['ROLE'] = $row['role'];
if($_SESSION['ROLE']=='a'){
header("Location: ..\dashBoard.php");
}else{
header("Location: ..\index.php");
}
保存会话后,您要做的只是使用
开始会话session_start()
每个页面中的功能。请注意,session_start()函数必须是文档中的第一件事。在任何HTML标记之前。然后检查会话的可用性以及是否未设置会话重定向到登录页面。请参见下面的代码。
<?php
session_start();
if(isset($_SESSION["ROLE"])){
}else{
header("Location: login.php");
}
?>
<!DOCTYPE html>
希望您可以从中获得一些东西。