[英]Session not working the first time but second time it works
当用户登录时,从会话中检索数据的第一页就可以了。 当我转到另一个页面时,会话是空白的。
我发现当用户登录并获取第一个用户页面 card.php 时,会话 ID 会发生变化。 例如,在访问 subscription.php 时,无论出于何种原因,会话 ID 都不同。
我试图在下面列出有用的代码:
登录用户登录.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();
}
?>
在header
重定向之后,使用exit();
结束当前脚本exit();
也许你错过了这个答案的一些东西:
您还可以在此处查看详细的会话状态:
https://www.w3schools.com/php/php_sessions.asp
或者,正如 Rikudou_Sennin 指出的那样,您一定是在 php 行session_start();
某处不小心遗漏了session_start();
在定义或访问会话变量之前。
第一,如果用户输入的用户名和密码与 $_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>
希望你能从中得到一些东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.