【问题标题】:Store User Rights in $_Session在 $_Session 中存储用户权限
【发布时间】:2019-01-30 12:42:48
【问题描述】:

我刚刚尝试为我的登录页面使用会话,我还想存储“权限”以启用或禁用对某些页面的访问。存储“用户”有效,但不存储“权限”。

更新:开始工作了。干杯!

表:

CREATEDATABASE`account`
CREATETABLE`profile`

id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user VARCHAR(20) NOT NULL,
pass VARCHAR(20) NOT NULL,
rights VARCHAR(10) NOT NULL,

登录页面/会话:

<?php
	session_start();
	$user = $_POST['user'];
	$pass = $_POST['pass'];
		
	$conn = mysqli_connect("localhost", "root", "", "account");
	
	$query = mysqli_query($conn, "SELECT * FROM account.profile WHERE user = '$user', pass = '$pass' ")
		or die("Failed to connect DB".mysqli_error());
					
	$rows = mysqli_num_rows($query);
	$right=$rows['right'];
	if ($rows == 1 ){
	$_SESSION['user']=$user; 

		header("Location: main.php");
		} 
	else 
	{
	 echo "<script>
     alert('Username and Password not found!');
     window.location.href='logout.php';
     </script>";
		}
?>

每一页的开头都是:

<?php 
session_start();
error_reporting(0);
$user=$_SESSION['user'];
$right=$_SESSION['right'];
if($user==true){
?>

希望有人能指引我走向正确的道路。谢谢!

【问题讨论】:

  • $_SESSION['right']=$right $right 从未定义
  • $rights = $_POST['rights']; ... $_SESSION['right']=$right; 是的,你这里有一个错字。
  • 你好@IdontDownVote 和@Havenard - 应该是session_start(); $rights = $_POST['rights']; ..... $user=$_SESSION['user']; $right=$_SESSION['right']; 吗?
  • 您很容易受到该代码的 SQL 注入攻击,您应该使用准备好的语句。用户密码也应该NEVER以纯文本形式存储。他们应该总是被散列
  • 您不想在登录时将内容放入会话中,而不是将它们拉出吗?

标签: php html session mysqli


【解决方案1】:

首先: 不需要下面的行,因为用户只需输入他的用户名和密码。把它拿出来。 $rights = $_POST['rights'];

其次,改变这一行: $_SESSION['right'] = $right;$_SESSION['right'] = $role; 您之前将选定的用户权限设置为变量 $role 而不是 $right

【讨论】:

  • 嗨@Chukwuemeka Inya - 抱歉,第二个是错字。我已经更新了脚本。我已经按照建议更新了声明,但它仍然没有存储rights,因为我试图回应它。用户名工作正常。
猜你喜欢
  • 2018-08-30
  • 2021-10-29
  • 1970-01-01
  • 2012-03-14
  • 2012-05-28
  • 2011-04-10
  • 2017-01-27
  • 2018-04-26
  • 1970-01-01
相关资源
最近更新 更多