Php 会话变量不工作?(菲律宾)
我对两个文件有问题:Php 会话变量不工作?(菲律宾),php,mysql,session,Php,Mysql,Session,我对两个文件有问题:login\u config.php和profile.php login_config.php由一个登录系统组成,该系统在完成多种形式的身份验证后将$\u会话['key']设置为true php是用户成功后重定向到的页面 我希望profile.php上的数据只能通过设置$_SESSION['key']来访问(在成功登录时) 我的问题:我的代码有什么错误?此外,为什么在提交登录时会出现错误,而只有当$\u SESSION['key']为false/未设置时才会返回,而不是目
login\u config.php
和profile.php
- login_config.php由一个登录系统组成,该系统在完成多种形式的身份验证后将$\u会话['key']设置为true
- php是用户成功后重定向到的页面
轮廓
-或-
试试我们的测试模式
注意:我知道在当前的代码状态下,我很容易受到SQL攻击,我将在稍后修复此问题,而且我仍然使用不推荐的MySQL版本。在
profile.php
中,您必须调用session_start()在使用$\u会话之前执行code>session\u start()
不仅启动新会话,还将继续现有会话(如果愿意,它将“启动”会话处理功能)。如果不调用它,就不能使用$\u SESSION
我会在您进入下一个PHP页面后,首先尝试删除exit()
调用。这是没有必要的,因为它下面没有代码,可能会影响会话(不过我不这么认为)
如果这不起作用(可能不会),请在启动会话var\u dump($\u session)
并查看/发布其内容后将其添加到profile.php
。我已通过为$\u session['key']分配一个带有值的变量来修复此问题
$_SESSION['key'] = $check = 'check';
然后,为了在profile.php中测试这一点,我输入了以下代码:
if(isset(!$_SESSION['key'])){die ('example')}
第一:为了避免“未定义索引‘login_username’”错误,我将使用术语运算符检查所需值的存在性。像这样:
$username = isset($_POST['login_username']) ? $_POST['login_username'] : '';
$password = isset($_POST['login_password']) ? $_POST['login_password']) : '';
$email = isset($_POST['login_email']) ? $_POST['login_email'] : '';
第二:我会使用PDO连接MySQL服务器,这不仅仅是出于安全原因
session_start();
if (isset($submit)){
// select all data from db for the current user
$st = $db->prepare('SELECT * FROM users WHERE email=?');
$st->execute([$email]);
//$rows = count_rows_here
if($rows == 1){
$row = $stmt->fetch();
if(password_verify($password, $row['pass'])){
$_SESSION['key'] = true; // notice the '=', and not '==='
$_SESSION['id'] = $row['id'];
$_SESSION['email'] = $row['email'];
$_SESSION['user'] = $row['username'];
$_SESSION['pass'] = $row['password'];
header('Location: profile.php');
} else {
echo 'Error!';
}
}
}
另外,提前感谢你的帮助——尤金不完全清楚这个问题为什么会被否决。仍然没有收到解决方案。您可以缩进代码,更具体地说明您遇到的错误。注释您的代码,以显示逻辑失败的地方以及您期望看到的/实际看到的内容session_start()代码>应该总是先开始,你不能在呈现了一些东西之后再开始,这些东西可能是代码,也可能是html。这是第一件需要打开的东西。所以你应该在设置变量之前使用它。会话始终处于活动状态,不管您是否使用它,是或否。此外,我建议您在设置会话后对会话进行var转储,并检查变量是否保存。因为你的会话保存了什么?这是否仅在页面的其余部分启用?以下是var\u dump($\u会话)的结果:数组(5){[“id”]=>字符串(2)“89”[“email”]=>string(8)“uyuy”[“user”]=>string(8)“uyuy”[“pass”]=>string(10)“uyuy”[“username”]=>string(8)“uyuy”}请登录查看此页面想补充一点,上面是一个随机帐户。您的问题很明显-会话中没有名为“key”的键。以前听说过术语运算符的人,都会查看它们!
$username = isset($_POST['login_username']) ? $_POST['login_username'] : '';
$password = isset($_POST['login_password']) ? $_POST['login_password']) : '';
$email = isset($_POST['login_email']) ? $_POST['login_email'] : '';
session_start();
if (isset($submit)){
// select all data from db for the current user
$st = $db->prepare('SELECT * FROM users WHERE email=?');
$st->execute([$email]);
//$rows = count_rows_here
if($rows == 1){
$row = $stmt->fetch();
if(password_verify($password, $row['pass'])){
$_SESSION['key'] = true; // notice the '=', and not '==='
$_SESSION['id'] = $row['id'];
$_SESSION['email'] = $row['email'];
$_SESSION['user'] = $row['username'];
$_SESSION['pass'] = $row['password'];
header('Location: profile.php');
} else {
echo 'Error!';
}
}
}