会话检查PHP

会话检查PHP,php,session,Php,Session,我试图实现基本会话处理,如下所示: PHP文件1-在对用户和 数据库中的密码等我想给这个用户一个会话 您需要在下添加session\u start()您需要在下添加session\u start()。在获取会话id之前,您必须先启动会话。PHP的默认会话处理实际上不允许您在启动会话和恢复现有会话之间进行细粒度控制;因此,无论何时调用获取“当前”会话id所必需的会话\u start,会话都将启动。这不是确定是否有人登录的有效方法 但是,在登录系统中,您通常需要知道谁登录了,因此您需要在会话中存储一

我试图实现基本会话处理,如下所示:

PHP文件1-在对用户和 数据库中的密码等我想给这个用户一个会话


您需要在
下添加
session\u start()
您需要在
下添加
session\u start()。在获取会话id之前,您必须先启动会话。PHP的默认会话处理实际上不允许您在启动会话和恢复现有会话之间进行细粒度控制;因此,无论何时调用获取“当前”会话id所必需的
会话\u start
,会话都将启动。这不是确定是否有人登录的有效方法

但是,在登录系统中,您通常需要知道谁登录了,因此您需要在会话中存储一个值,指示用户是谁。只需检查该值的存在性/正确性即可确定记录的输入量:

session_start();

if (empty($_SESSION['user'])) {
    header('HTTP/1.0 401 Unauthorized');
    exit;
}

仅仅出席一次会议并不意味着什么。在获取会话id之前,您必须先启动会话。PHP的默认会话处理实际上不允许您在启动会话和恢复现有会话之间进行细粒度控制;因此,无论何时调用获取“当前”会话id所必需的
会话\u start
,会话都将启动。这不是确定是否有人登录的有效方法

但是,在登录系统中,您通常需要知道谁登录了,因此您需要在会话中存储一个值,指示用户是谁。只需检查该值的存在性/正确性即可确定记录的输入量:

session_start();

if (empty($_SESSION['user'])) {
    header('HTTP/1.0 401 Unauthorized');
    exit;
}

这是对默认php会话机制的简化解释:

使用
session_start()启动会话时生成一个唯一的会话ID,并通过会话cookie发送到客户端,因此用户下次访问您的网站时,可以使用cookie中发送给他的会话ID检索其会话数据(存储在服务器上的文件中)

这是通过比较cookie中的会话ID和存储会话数据的文件名来完成的,该文件名中包含该ID

为确保只有特定用户才能访问网站的某些区域,您需要在
$\u会话
全局变量中存储唯一值,例如:

<?php 
    session_start();

    if (!isset($_SESSION["user"]) || $_SESSION["user"] !== 'someValue'){
          echo 'not allowed';
    } else {
          echo 'allowed';   
    }

这是对默认php会话机制的简化解释:

使用
session_start()启动会话时生成一个唯一的会话ID,并通过会话cookie发送到客户端,因此用户下次访问您的网站时,可以使用cookie中发送给他的会话ID检索其会话数据(存储在服务器上的文件中)

这是通过比较cookie中的会话ID和存储会话数据的文件名来完成的,该文件名中包含该ID

为确保只有特定用户才能访问网站的某些区域,您需要在
$\u会话
全局变量中存储唯一值,例如:

<?php 
    session_start();

    if (!isset($_SESSION["user"]) || $_SESSION["user"] !== 'someValue'){
          echo 'not allowed';
    } else {
          echo 'allowed';   
    }

因此,根据@deceze、@Difster和@blackcat的回复,我实施了以下措施:

login.php

stuff.php


因此,根据@deceze、@Difster和@blackcat的回复,我实施了以下措施:

login.php

stuff.php



如果(!empty$\u session)要检查是否有您检查的会话,请参阅下面我的修订答案。如果(!empty$\u session)要检查是否有您检查的会话,请参阅下面我的修订答案。如果您只是启动会话,则根据定义,所有用户都将有一个会话,这意味着没有有效的登录检查。如果你检查我问题的最后一段,我不希望这样做,因为有人仍然可以在没有登录的情况下执行PHP文件。是的,所有用户都有一个会话,这就是为什么你必须对用户数据库进行身份验证。会话并不用于跟踪身份验证,因为它们只是克服http和https的无状态特性的一种方法。@BernardV您必须在文件1中向会话写入一些内容,以便在文件2中再次检查。会话本身应该始终启动。@BjörnTantau我一直认为您可以检查自动生成的PHPSESSID,该PHPSESSID应该随每个请求一起发送到PHP?因此,如果我的服务器上不存在ID,您可以阻止访问。如果您只是启动一个会话,那么根据定义,所有用户都将有一个会话,这意味着没有有效的登录检查。如果您检查我问题的最后一段,我不希望这样做,因为这样有人仍然可以在没有登录的情况下执行PHP文件。是的,所有用户都将有一个会话,这就是为什么必须对用户数据库进行身份验证。会话并不用于跟踪身份验证,因为它们只是克服http和https的无状态特性的一种方法。@BernardV您必须在文件1中向会话写入一些内容,以便在文件2中再次检查。会话本身应该始终启动。@BjörnTantau我一直认为您可以检查自动生成的PHPSESSID,该PHPSESSID应该随每个请求一起发送到PHP?因此,如果我的服务器上不存在ID,您可以阻止访问
被触发,浏览器/用户将在向PHP服务器发出的每个请求中使用相同的PHPSESSID(同时打开浏览器会话),因此我将能够对照PHP服务器的当前会话存储检查是否有任何使用该PHPSESSID的活动会话…
会话_start
实际上意味着“初始化PHP的会话处理子系统”,如果浏览器没有发送会话cookie,它将启动一个新会话,如果浏览器发送了一个现有会话cookie,它将恢复一个现有会话。因此,只需检查是否有会话id(havin之后)
//start a session
session_start(); 
//add some session data
$_SESSION["logged_in"] = true;                                                       
$_SESSION["user"] = $userName;
session_commit();
session_start();

if ((isset($_SESSION["user"])) && (isset($_SESSION["logged_in"]))) {        
    echo ('You shall pass:'.$_SESSION["user"]);        
    //stuff.php logic can start
} else {        
    header('HTTP/1.0 401 Unauthorized');
    exit;        
}