存储在 $_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
数组填充了值,但我的$_SESSION
array 完全为空。为什么?
【问题讨论】:
【参考方案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 数组中的值的主要内容,如果未能解决你的问题,请参考以下文章
python16_day17Django_sessionajax
PHP:$_SESSION - 在 $_SESSION 变量中存储临时使用的数据的优缺点是啥