登录页面传递 $_SESSION
Posted
技术标签:
【中文标题】登录页面传递 $_SESSION【英文标题】:Login Page Passing $_SESSION 【发布时间】:2016-05-06 07:23:08 【问题描述】:我不确定为什么 $_SESSION 变量 'user' 没有被传递。我确实成功登录,但是当重定向到我的主页时,会话不会保留。我使用登录状态 php 文件来切换一些导航栏项目以签名/注册或名字和注销。
登录页面:
<?php
session_start();
include_once 'dbconnect_new.php';
if(isset($_SESSION['user'])!="")
header("Location: ../index.php");
if(isset($_POST['btn-login']))
$s_email = mysql_real_escape_string($_POST['email']);
$s_password = mysql_real_escape_string($_POST['password']);
$s_email = trim($s_email);
$s_password = md5(trim($s_password));
$res=mysql_query("SELECT student_id, student_firstname FROM studentdata WHERE student_email='$s_email' AND student_password='$s_password'");
if (!$res)
// Debug query result by below code
//echo 'Could not run query: ' . mysql_error();
//exit;
echo '<script language="javascript">';
echo 'alert("Username / Password Seems Wrong !")';
echo '</script>';
else
$row = mysql_fetch_row($res);
$stu_id = $row[0];
$stu_fname = $row[1];
$_SESSION['user'] = $stu_id;
header("Location: ../index.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Reg Page</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<center>
<div id="login-form">
<form method="post">
<table align="center" border="0">
<tr>
<td>
<input type="text" name="email" placeholder="Your Email" required />
</td>
</tr>
<tr>
<td>
<input type="password" name="password" placeholder="Your Password" required />
</td>
</tr>
<tr>
<td>
<button type="submit" name="btn-login">Sign In</button>
</td>
</tr>
<tr>
<td><a href="register_new.php">Sign Up Here</a></td>
</tr>
</table>
</form>
</div>
</center>
</body>
</html>
登录状态页面:
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimal-ui">
<link href="favicon.png" type="image/x-icon" rel="shortcut icon">
<link href="assets/css/master.css" rel="stylesheet">
<script src="assets/plugins/jquery/jquery-1.11.3.min.js"></script>
</head>
<?php if(isset($_SESSION['user']))
$res=mysql_query("SELECT * FROM studentdata WHERE student_id=".$_SESSION['user']);
$userRow=mysql_fetch_row($res);?>
<li class="dropdown">
<a href="">
<?php echo $userRow['student_firstname'];?><span class="nav-subtitle">Account</span></a</li>
<li><a href="includes/logout.php" title="">Logout<span class="nav-subtitle">Goodbye</span></a></li>
<?php else ?>
<li><a href="includes/register_new.php" title="">Register<span class="nav-subtitle">for Students</span></a></li>
<li><a href="includes/login_new.php" title="">Login<span class="nav-subtitle">for Students</span></a></li>
<?php ?>
</html>
很确定我只是缺少一些简单的东西。
【问题讨论】:
您没有在登录状态页面中开始会话。 你真的不应该使用MD5 password hashes,你真的应该使用PHP的built-in functions来处理密码安全。如果您使用的 PHP 版本低于 5.5,则可以使用password_hash()
compatibility pack。
请stop using mysql_*
functions。 These extensions 已在 PHP 7 中删除。了解PDO 和 MySQLi 的 prepared 语句并考虑使用 PDO,it's really pretty easy。
Your script is at risk for SQL Injection Attacks.
谢谢 session_start();通常在index.php中处理,我将其添加到此并进行了测试,仍然没有运气。
【参考方案1】:
我想你忘了添加
session_start();
在登录状态页面的开头:
【讨论】:
以上是关于登录页面传递 $_SESSION的主要内容,如果未能解决你的问题,请参考以下文章
如何设置web页面访问权限?只允许登录用户访问login.php,其他页面未通过验证均跳转到登录界面