每次访问session变量时都需要使用session_start()吗?

问题描述 投票:0回答:7

我开始学习php。我有一个关于会议的问题。

现在,我知道

session_start()
创建了一个会话变量。

我不知道的是,当我访问我创建的会话时,我是否需要再次使用

session_start()

如果是的话...

这是为什么呢?因为我已经创建了一个会话,我想知道为什么它不能持续整个浏览会话。

php session variables
7个回答
8
投票

因为我从中了解到,它将创建一个新会话。

否:

session_start()
根据通过 GET 或 POST 请求传递或通过 cookie 传递的会话标识符创建会话 或恢复当前会话

http://php.net/session_start

您访问的每个新页面都是 PHP 的全新上下文。

session_start
允许您重新建立以前的上下文/会话/数据。


2
投票

session_start 函数告诉 PHP 启用会话跟踪。它不会清除前一页创建的会话。您必须先调用 session_start(),然后才能访问 $_SESSION 中的任何变量。


1
投票

因为手动session_start()

session_start
— 开始新的或恢复现有会话

与每次使用数据库时连接数据库的方式相同。它将连接到您存储会话的方式。会话变量没有被清除。

还可以阅读更多内容这里,但这应该有助于理解会话如何工作:

当您使用应用程序时,您打开它,进行一些更改 然后你关闭它。这很像一个会话。电脑知道 你是谁。它知道您何时启动应用程序以及何时结束。 但在互联网上有一个问题:网络服务器不知道 您是谁以及您做什么,因为 HTTP 地址无法维护 状态。

PHP 会话允许您存储用户来解决这个问题 服务器上的信息供以后使用(即用户名、购物 物品等)。然而,会话信息是临时的,将会被 用户离开网站后删除。如果您需要永久 存储 您可能希望将数据存储在数据库中。

会话通过为每个访客和商店创建唯一的 ID (UID) 来工作 基于此 UID 的变量。 UID 存储在 cookie 中或 在 URL 中传播。


1
投票

会话数据存储在服务器端,但会话的引用或 ID 存储在客户端的浏览器 cookie 中。为了让服务器知道您的会话 ID,我们在每个页面(顶部)上调用

session_start()
,以便首先从用户处获取 id 并检索会话数据。每当您想要访问会话数据时,每个页面都需要它。

这里还有一个视频教程。 http://blip.tv/step4wd/php-sessions_en-5983086


0
投票

答案是肯定的。您必须在每个页面上执行此操作。如果你不这样做,你会得到一个未定义的索引错误。

这会起作用,因为我们包含该文件

索引.php

<?php
 session_start();

//file doesn't have session_start 
include "file.php";
?>

0
投票

不:它并不总是会创建一个新会话。它仅告诉脚本该页面想要启动或维护现有会话。

会话只不过是您从一个页面携带到另一个页面的服务器状态。 无法从客户端(浏览器)访问它。 浏览器必须做的唯一一件事就是传递一个 ID(在 PHP 中称为默认 PHPSESSID)。

此 ID 可以存储在 cookie、GET 或 POST 中,只要您在发出每个请求时将其传输到服务器即可。


-2
投票

您必须使用 session_start(),在任何需要使用会话的地方,例如创建、访问、销毁。

与 cookie 不同,除非您启动会话,否则您无法访问或使用会话。

© www.soinside.com 2019 - 2024. All rights reserved.