Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 保留用户信息_Php_Mysql - Fatal编程技术网

Php 保留用户信息

Php 保留用户信息,php,mysql,Php,Mysql,我可以让用户登录,但如何将他们的信息传递到其他页面?我想让$thisUser保留对 $query = "SELECT * FROM users WHERE username = ? AND password = ? LIMIT 1"; 下面是我登录他们的代码 <?php require_once 'includes\constants.php'; class Mysql{ private $conn; function __construct(){

我可以让用户登录,但如何将他们的信息传递到其他页面?我想让
$thisUser
保留对

$query = "SELECT * FROM users WHERE username = ? AND password = ? LIMIT 1";
下面是我登录他们的代码

    <?php

require_once 'includes\constants.php';

class Mysql{
    private $conn;

    function __construct(){
        $this->conn = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME) or die('There was  a problem conecting to the database.');
    }

    function verify_username_and_pass($un, $pwd) {      
        $query = "SELECT * FROM users WHERE username = ? AND password = ? LIMIT 1";

        if($stmt = $this->conn->prepare($query)){
            $stmt->bind_param('ss',$un,$pwd);
            $stmt->execute();

            if($stmt->fetch()) {
                $stmt->close();
                return true;
        }
    }
    }

}

    <?php

require 'classes\mysql.php';

class Membership{

    function validate_user($un,$pwd) {
        $mysql = New Mysql();
        $ensure_credentials = $mysql->verify_username_and_pass($un,md5($pwd));

        if($ensure_credentials) {
            $_SESSION['status'] = 'authorized';
            header("location: index.php");
            } else return "Please enter a correct username and password";
    }

    function log_user_out() {
        if(isset($_SESSION['status'])) {
            unset($_SESSION['status']);

            if(isset($_COOKIE[session_name()])) 
                setcookie(session_name(),'',time() - 10000 );
                session_destroy();
        }
        }
}

HTML是无状态的,这意味着您不能在页面加载之间保存数据。但是,您可以在PHP中使用称为会话的东西,它使您能够跨对服务器的调用存储数据(pageloads)

只需调用
session\u start()
然后开始使用全局
$\u session
变量,就很容易了。每个访问者的会话都是唯一的


我会将信息保存在
$\u会话中,以便在整个站点中保存它。当使用的用户登录时,在他们通过登录后,将信息添加到您需要保留的
$\u会话中。

您可以创建的最简单的模型是使用类似于

在调用会话的任何脚本的顶部:

session_start();
然后在会话中创建名称/值对:

$_SESSION['blnLoggedIn'] = $blnLoggedIn;
然后查询或测试存储的值:

echo $_SESSION['blnLoggedIn'];
然后可以在任何“安全”页面的顶部查询此值,如果用户不再登录,则可以将其重定向到登录页面

if (!$_SESSION['blnLoggedIn']) {
    header('Location: http://www.example.com/login');
}
    [...'secure' page content...]
}
会话的问题在于,它们只能持续任意时间段(如果我记得的话,大约24分钟)。通过更多的工作,您可以创建一个登录模型,该模型使用
$\u会话
、cookie和数据库来确定会话过期后是否仍应登录。有多种方法可以做到这一点,但最简单的方法是将用户名存储在香草饼干中。在会话到期时,当点击一个新页面时,cookie用于查询数据库并确定它们是否在某个时间段内(比如一小时)登录。出于此目的和其他目的,他们登录的时间会记录在数据库中


有关更多详细信息,请阅读上的PHP手册。密切关注用户提交的评论;它们是无价之宝。

会话和/或cookies似乎非常适合于此-1,没有理由。。。谢谢:D@GlenMorse当前位置当一个问题被多次询问时,有些人会投反对票。右边有一个“相关”部分,似乎有许多问题与你的问题非常相似。这是我对你为什么被否决的猜测。我同意,如果否决票附带一个小的解释,这样人们就可以修改这个问题,使之更好,那将是一件好事。我感觉到了!这是一个关于强迫人们解释他们的反对票的有趣的讨论。@Dudenrock我可以看到,关于相关列表,我有一个问题,就是很多时候它是相关的,但不是相同的代码。。虽然大多数时候我的问题都是关于德尔菲的,但有些问题并不常见。他们还应该添加相关的“查看”标签。我相信我正在使用会话或我这么认为。其中一个字段是用户名。如果我尝试$\u Session['username'],它不会返回。您确定要调用Session\u start()?不确定。。但是$_会话['status']正在工作,所以我认为会话从哪里开始。我是调用一次还是每页调用一次?在加载的每个“页面”上使用会话变量之前,必须调用会话_start(),注意不是每个文件。我的意思是,如果包含会话的文件allready调用了会话_start(),那么您不必在包含该文件的文件中调用会话_start()。如果我没记错,您可以将数组保存到会话变量,但无法保存,或者将对象保存到会话变量很麻烦。这是一本参考手册。如果您不知道要查找什么,很难知道要查找什么。我对会话还是有点陌生,手册非常丰富,我发现在这里获得一些帮助并使用它可以帮助我学习。您需要使用
SESSION\u start()设置启动
$\u会话
开始使用
$\u会话
。使用
$会话的每个页面都需要
会话启动()-或者您可以将其添加到整个站点包含的文件中@daniel figueroa有一些很好的入门链接。