存储在 $_SESSION 但显示在 $_COOKIES 数组中的值

Posted

技术标签:

【中文标题】存储在 $_SESSION 但显示在 $_COOKIES 数组中的值【英文标题】:Values stored in $_SESSION but showing in $_COOKIES array 【发布时间】:2021-04-21 18:09:41 【问题描述】:

我从网上了解到,用户名密码等机密信息应该通过session而不是cookies发送,因为它们很容易受到攻击。

我的接受输入的 HTML 表单:

<body>
    <h2>Cafeteria registration</h2>
    <form class="details" method="POST">
        Full name: <input type="text" placeholder="Please avoid any kind of prefixes" id="name" size=25 oninput="login()"><br><br>
        Organization:<div id="org"><input type="checkbox" id="cb1" onclick="check()">ID no: <input type="number" id="org_number" style="visibility: hidden"><br><br>
                     <input type="checkbox" id="cb2" onclick="check()">Mobile No: <input type="tel" id="ph_number" style="visibility: hidden" required></div><br><br>
        
        E-mail: <input type="email" id="email" size=25><br><br>
        
    </form>
    <button id="button" style="background-color: whitesmoke">Register</button>
    <script src="back_end.js" async></script>
</body>

存储来自 html 表单的输入的 Javascript:

sessionStorage.setItem("name",document.getElementById("name").value);
sessionStorage.setItem("ID_No",document.getElementById("org_number").value);
sessionStorage.setItem("Mobile_No",document.getElementById("ph_number").value);
sessionStorage.setItem("Email",document.getElementById("email").value);

PHP 读取值:

<?php
    session_start();
    var_dump($_SESSION); //This shows to be completely empty
    var_dump($_COOKIE);  //Surprisingly, all the values show in this array
?>

我的$_COOKIE 数组填充了值,但我的$_SESSIONarray 完全为空。为什么?

【问题讨论】:

【参考方案1】:

会话是变量,只有你可以在服务器端设置它,这是你的问题,你需要先用 post 方法将它们传递给一个像这样的 php 文件

<form action="action.php" method="post">

然后将它们从$_POST 全局变量中获取到 php 中,然后像这样 f.e. 从您的 php 文件中保存它

<?php
// Start the session
session_start();

// Set session variables
$_SESSION["name"] = $_POST["name"];

然后你可以用这段代码看到它们

var_dump($_SESSION);
var_dump($_COOKIE);

like 也将帮助您了解会话和 cookie 之间的区别

【讨论】:

【参考方案2】:

sessionStorage 不在服务器端会话变量中存储数据。它在窗口/选项卡的生命周期内将数据存储在客户端上。 javascript 在浏览器中运行,而不是在服务器上(至少在您的情况下)。详细了解会话存储here。

sessionStorage 也不设置 cookie。您的代码必须在其他地方设置这些。

最后,如果您想通过网络发送用户数据(您的表单可能是注册表单),只需使用$_POST variables。密码不应存储在数据库以外的任何地方;它甚至不应该被记录。

【讨论】:

我试过$_POST,但它也是空的。

以上是关于存储在 $_SESSION 但显示在 $_COOKIES 数组中的值的主要内容,如果未能解决你的问题,请参考以下文章

Cookie和Session_会话技术

python16_day17Django_sessionajax

PHP:$_SESSION - 在 $_SESSION 变量中存储临时使用的数据的优缺点是啥

商品的浏览记录

JavaWeb_(session和application)用户登录注册模板_进阶版

在 $_SESSION 中存储 Doctrine 对象