PHP:会话变量

Posted

技术标签:

【中文标题】PHP:会话变量【英文标题】:PHP: Session variables 【发布时间】:2012-08-03 07:10:29 【问题描述】:

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

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

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

如果是...

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

【问题讨论】:

session_start 开始新的会话或恢复现有会话 @Dr.Dan 你是说我根本不应该使用会话吗? 关于为什么的好问题。我从未想过为什么需要它。 【参考方案1】:

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

没有:

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

http://php.net/session_start

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

【讨论】:

【参考方案2】:

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

【讨论】:

+1。顺便说一句,如果你再次调用 session_start() - 什么都不会改变【参考方案3】:

由于手册session_start()

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

每次您想使用它时都以同样的方式连接到数据库。它将连接到您存储会话的任何位置。会话变量不会被清除。

还可以阅读更多 here 但这应该有助于了解会话的工作原理:

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

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

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

【讨论】:

【参考方案4】:

会话数据存储在服务器端,但会话的引用或 ID 存储在客户端的浏览器 cookie 中。为了让服务器知道您的会话 id,我们在每个页面上调用session_start(),它是必需的(在顶部),因此首先要做的是从用户那里获取 id 并检索会话数据。每当您要访问会话数据时,每个页面都需要它。

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

【讨论】:

【参考方案5】:

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

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

索引.php

<?php
 session_start();

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

他问为什么,他知道他需要在每个页面上使用它。

以上是关于PHP:会话变量的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 登录脚本中使用会话和会话变量

PHP 会话变量没有传递到我的登录页面,但会话 ID 是

php会话变量不一致

php - 会话变量何时保存?

PHP - 将会话变量设置为在 30 分钟后过期 [重复]

PHP - 啥是会话变量的替代品