Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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$\u会话,尝试访问用户表时不显示任何输出,当会话被终止时,会话保持活动状态_Php - Fatal编程技术网

PHP$\u会话,尝试访问用户表时不显示任何输出,当会话被终止时,会话保持活动状态

PHP$\u会话,尝试访问用户表时不显示任何输出,当会话被终止时,会话保持活动状态,php,Php,我正在尝试构建一个安全的sessionID。 通常我将用户ID存储为$\u会话['SESSION'],现在我不太确定将用户ID作为会话ID是否真的安全。所以我所做的是测试这个理论,尽管现在我无法访问用户信息,并且在我终止会话之后,会话仍然是活动的和可用的 检查登录是否正确的代码: if(password_verify($userPass, $user['userPasswd'])) { session_start(); $UID = str_replace($user['text

我正在尝试构建一个安全的sessionID。 通常我将用户ID存储为
$\u会话['SESSION'],现在我不太确定将用户ID作为会话ID是否真的安全。所以我所做的是测试这个理论,尽管现在我无法访问用户信息,并且在我终止会话之后,会话仍然是活动的和可用的

检查登录是否正确的代码:

if(password_verify($userPass, $user['userPasswd']))
{
    session_start();
    $UID = str_replace($user['text'].$user['text1'], '', $user['uniqID']);
    $_SESSION['SESSION'] = sha1(md5(sha1($UID)));
    return true;
} else {
    return false;
}
注销脚本:使用$\u SESSION=array()编辑已修复

访问用户表信息(用户名、电子邮件等)的脚本:

我不确定我是否错过了一个步骤,或者是否有必要对会话进行哈希运算,也许我做得不对。本质上,我试图通过散列来保护userID,而不是让它显示用户的实际ID

附加说明:如果我更改会话以获取实际用户ID,例如:1

$userID = 1; //i did set the $_SESSION var to the userID to check if logout works
$stmt = $userClass->runQuery("SELECT * FROM users WHERE userID=:userID");
$stmt->execute(array(":userID"=>$userID));
$user = $stmt->fetch(PDO::FETCH_ASSOC);

print_r($_SESSION['SESSION']); //prints out 1 //still does not destroy session after userLogout() is initiated 
print $user['Username']; //Prints username which is correct 

几个小时来一直对此感到困惑,也许一套不同的眼睛和经验可能会对x_x有所帮助。

您需要遵循以下方法:

session_start();

// Unset all of the session variables.
$_SESSION = array();

// Finally, destroy the session.
session_destroy();

您需要遵循以下方式:

session_start();

// Unset all of the session variables.
$_SESSION = array();

// Finally, destroy the session.
session_destroy();
(这是一条评论,但有点长)

正如ADyson所说,这是非常混乱的编码。您的代码和叙述都不能解释您在这里想要实现的目标。什么是威胁模型?你对“安全”的定义是什么<代码>$\u会话['SESSION']
不可用

如果在会话中存储的标识符(实际上是随机的,但不够随机)和用户名之间存储一个静态映射,那么您所做的就是限制系统的性能和可伸缩性-我看不出它如何为安全性增加任何价值

有一种使用模型,您可能需要一个具有凭证证明的用户数据库,您可以在其中散列用户名,但事实并非如此

有一些模型可以保护会话数据不受共享主机上其他订阅者的影响(分区较差)。这也不是

有一些模型可以确保会话数据在备份中得到保护……不,这也不是很好

sha1(md5(sha1($UID))

这太傻了

在您开始尝试通过抛出代码来改进默认会话处理程序之前,请花一些时间了解默认会话处理程序实际上是如何工作的(提示:其中有些内容并不适合于每个应用程序,但如果您想改进它们,请不要用其他代码包装默认处理程序)。但在编写任何代码之前,您需要准确地了解您要实现的目标。

(这是一条注释,但有点长)

正如ADyson所说,这是非常混乱的编码。您的代码和叙述都不能解释您在这里想要实现的目标。什么是威胁模型?你对“安全”的定义是什么<代码>$\u会话['SESSION']不可用

如果在会话中存储的标识符(实际上是随机的,但不够随机)和用户名之间存储一个静态映射,那么您所做的就是限制系统的性能和可伸缩性-我看不出它如何为安全性增加任何价值

有一种使用模型,您可能需要一个具有凭证证明的用户数据库,您可以在其中散列用户名,但事实并非如此

有一些模型可以保护会话数据不受共享主机上其他订阅者的影响(分区较差)。这也不是

有一些模型可以确保会话数据在备份中得到保护……不,这也不是很好

sha1(md5(sha1($UID))

这太傻了


在您开始尝试通过抛出代码来改进默认会话处理程序之前,请花一些时间了解默认会话处理程序实际上是如何工作的(提示:其中有些内容并不适合于每个应用程序,但如果您想改进它们,请不要用其他代码包装默认处理程序)。但是,在编写任何代码之前,您需要准确地了解您想要实现的目标。

这会终止会话,尽管会话的哈希版本仍然与初始uniqID的哈希不匹配。这意味着它仍然不显示users表/列。您试图检索记录的UID应该与数据库记录匹配。例如,您制作了类似$test=md5(“test”)的散列代码;它被插入到您的数据库中,并尝试使用相同的模式“SELECT*FROM USER WHERE name=“.md5('test')@ShariatHossain Valid point”检索数据。我认为会话哈希可能与用户表数据不正确匹配,这将导致不显示任何数据。去检查他们是否匹配正确是的,确实有帮助,尽管这不是完整的答案。我将把您添加到完整的答案中:),它可以终止会话,尽管会话的哈希版本仍然与初始uniqID的哈希不匹配。这意味着它仍然不显示users表/列。您试图检索记录的UID应该与数据库记录匹配。例如,您制作了类似$test=md5(“test”)的散列代码;它被插入到您的数据库中,并尝试使用相同的模式“SELECT*FROM USER WHERE name=“.md5('test')@ShariatHossain Valid point”检索数据。我认为会话哈希可能与用户表数据不正确匹配,这将导致不显示任何数据。去检查他们是否匹配正确是的,确实有帮助,尽管这不是完整的答案。我将把你加入完整的答案中:)你到底想达到什么目的?“安全”会话ID是什么意思?会话对当前用户是私有的,除非有人侵入服务器并可以读取RAM,否则您会遇到更大的问题。你想解决什么问题<代码>sha1(md5(sha1($UID))似乎有点过分了
session_start();

// Unset all of the session variables.
$_SESSION = array();

// Finally, destroy the session.
session_destroy();