问题 PHP:会话变量


我开始学习php了。我对会话有疑问。

现在,我知道 session_start() 创建一个会话变量。

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

如是...

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


2002
2017-08-06 10:03


起源

HTTP是无状态协议 - Dr. Dan
session_start启动新会话或恢复现有会话 - Sudhir Bastakoti
@DrDan你是说我根本不应该使用会话? - Krimson
关于原因的好问题。我从未想过为什么需要它。 - Undefined


答案:


因为我从中理解的是,它将创建一个新的会话。

没有:

session_start() 创建一个会话 或恢复当前的 基于通过GET或POST请求传递的会话标识符,或通过cookie传递的会话标识符。

http://php.net/session_start

您访问的每个新页面都是PHP的全新上下文。 session_start 允许你 重建 先前的上下文/会话/数据。


8
2017-08-06 10:06





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


2
2017-08-06 10:06



+1。顺便说一句,如果你再次调用session_start() - 什么都不会改变 - lukas.pukenis


因为手册 在session_start()

session_start  - 开始新的或 恢复 现有会议

与每次要使用它时连接到数据库的方式相同。它会连接到你存储你的会话。会话变量没有消失。

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

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

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

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


1
2017-08-06 10:07





会话数据存储在服务器端,但会话的引用或ID存储在客户端的浏览器cookie中。为了让服务器知道你的会话ID,我们打电话给 session_start() 在每个页面上它是必需的(在顶部),以便完成的第一件事是从用户获取id并检索会话数据。每当您想要访问会话数据时,都需要它。

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


1
2017-08-06 10:11





答案是肯定的。你必须在每一页上都这样做。如果不这样做,则会得到未定义的索引错误。

这将有效,因为我们包含该文件

的index.php

<?php
 session_start();

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

0
2017-08-06 10:09





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

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

此ID可以存储在cookie,GET或POST中,只要您在每次请求时将其转移到服务器即可。


0
2017-08-06 10:08





你需要使用session_start(),你需要处理会话,如创建,访问,销毁。

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


-2
2017-08-06 10:05



他问为什么,他知道他需要在每一页上使用它。 - Undefined