首页 > 解决方案 > 单击href时如何在php中保留变量的值?

问题描述

对于我正在为我的新业务开发的网站,我创建了一种让客户创建帐户和登录的方法。当客户登录时,我用 PHP 制作了一个日历,它连接到 SQL 以显示我的服务的可用时间。在我的网页代码顶部,它验证从前一个屏幕上的表单中获取的帐户

<?php

include 'DB_connect.php';

$PHONE = $_POST['phone'];
$PASSWORD = $_POST['password'];

$sql = "SELECT * FROM users WHERE phone = '$PHONE' AND pass = '$PASSWORD';";

$result = mysqli_query($link,$sql);
$check = mysqli_fetch_array($result);
if (!isset($check)) {
    echo 'Incorrect Username/Password Combination';
    exit();
}
?>

在日历上,当您在月份之间切换时,我创建了一个 href 以像这样在 php 中打印出日历

<h4><a href="?ym=<?php echo $prev;?>">&lt;</a><?php echo $html_title; ?><a href="?ym=<?php echo $next; ?>">&gt;</a></h4>

但是当切换到上个月和下个月时,它会重新运行顶部的代码,检查用户的登录信息,因为没有任何值

$PHONE = $_POST['phone'];
$PASSWORD = $_POST['password'];

因此,当尝试在我的日历上的月份之间切换时,它最终会注销用户。我需要做什么才能让用户在月份之间切换时保持登录状态?有没有办法在用户登录后将电话和密码变量更改为常量?我已经坚持了好几天了,一直没能弄清楚。请帮忙!

标签: phpmysqli

解决方案


你会想看看session。您应该在验证用户凭据后启动会话。$_SESSION然后,您可以使用超级全局在会话中存储您需要的任何用户信息。

在后续交互中,您检查会话是否有效,而不是重新验证用户凭据。

您还应该解决 SQL 注入漏洞并在数据库中正确散列密码。

登录表格 POST:

<?php
if(/*Verify user credentials*/){
    session_start();
    $_SESSION["user"]=$user;
}
?>

已验证的页面视图:

<?php
session_start();
if(isset($_SESSION["user"])){
    //Do authenticated actions
}
else{
    //User is not authenticated
}
?>

处理会话的许多其他方面过于深入,无法在此描述。例如,您需要为会话正确配置过期时间并考虑存储机制。如果您在负载均衡器后面运行应用程序,则需要一个中央会话存储位置(如数据库或 Redis)。还有许多其他因素需要考虑。


推荐阅读