gpt4 book ai didi

PHP session ,为什么 session_start() 需要多次?

转载 作者:行者123 更新时间:2023-12-04 14:29:06 27 4
gpt4 key购买 nike

我正在编写一个 Web 应用程序,它将 POST 数据保存到一个页面中的 session ,然后重定向到另一个页面以利用创建的 session 信息。这是在我读到处理数据和显示数据的正确方法是将它们分成两个不同的脚本之后,以免遇到多余的 $_POST 数据问题。也就是说,不要在每次页面刷新时保持 $_POST 向服务器发送相同的数据。

我有一个查看页面,index.php ,和一个数据处理页面,setDate.php .查看时index.php ,用户可以选择设置$_POST['month']$_POST['year']通过输入表单将变量提交给 setDate 以分配 $_SESSION['desMonth']$_SESSION['desYear']分别。

直到我添加了第二个(IMO 冗余)session_start(); setDate.php 上的声明代码开始按我想要的方式工作。没有它就好像index.php忽略了 setDate.php$_SESSION[*]完全修改。

为什么我要定义这个多余的session_start();如果我已经在初始 index.php 上启动了 session (并收到了 PHPSESSID cookie) $_SESSION[*]正在使用数据?

以下是一些工作代码片段:
setDate.php

<?php
require_once 'jan.php';
session_start();

//get the requested month and years to view (iterative).
if(isset($_POST['nextMonth']) && filter_var($_POST['nextMonth'], FILTER_SANITIZE_NUMBER_INT)) { //this filter only allows +- and 0-9
$_SESSION['desMonth'] += sanitizeInput($_POST['nextMonth']);
if($_SESSION['desMonth'] > 12) {
$_SESSION['desMonth'] = $_SESSION['desMonth']-12;
$_SESSION['desYear'] += 1;
}
else if($_SESSION['desMonth'] < 1) {
$_SESSION['desMonth'] = 12;
$_SESSION['desYear'] -= 1;
}
}

//get the explicit month and years to view.
if(isset($_POST['month']) && filter_var($_POST['month'], FILTER_SANITIZE_NUMBER_INT)) {
$_SESSION['desMonth'] = sanitizeInput($_POST['month']);
echo "set month";
}
if(isset($_POST['year']) && filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT)) {
$_SESSION['desYear'] = sanitizeInput($_POST['year']);
echo "set year";
}

echo $_SESSION['desMonth'];
echo $_SESSION['desYear'];
header("Location: /");
die();

?>

截断 index.php
<?php 
session_start();
require_once 'cellUpdater.php';

$timeForDateUse = mktime(1,1,10,$_SESSION['desMonth'],1,$_SESSION['desYear']); //this line is used for various formatting below.
...

没有 session_start(); setDate.php 中的声明 $_SESSION[*]数据不会被保留。为什么?

编辑:回答问题,编辑虚构的互联网点

最佳答案

来自 php.net:

session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie.

When session_start() is called or when a session auto starts, PHP will call the open and read session save handlers.



换句话说, session_start()不仅在 session 尚不存在时创建 session ,而且还使脚本可以访问当前 session 。它给出了读取 $_SESSION 的写入权限多变的。

没有 session_start ,脚本无法从 session 中写入或读取, session 仍然存在,但脚本无法读取或修改它。如果您只想授予对 session 的读取权限,您可以调用 session_write_close();关闭写访问。当您希望多个文件同时打开同一个 session 时,这会很方便。当脚本具有写访问权限时,它会阻止当前 session 文件,从而阻止所有其他想要对同一 session 进行写访问的脚本。

如果您很懒惰并且总是希望 session 处于事件状态,您可以编写
php_flag session.auto_start 1

.htaccess文件以在 php.ini 中启用 session 的自动启动。

关于PHP session ,为什么 session_start() 需要多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com