2010-10-25 78 views
15

这是真的吗?PHP session_start()

它是否基于cookie启动当前会话?从PHP网站得到了这一点。 PHP如何控制会话?如果我在用户打开登录页面时开始会话,我甚至会使用该会话进行什么操作?我可以使用当前会话获取有关登录用户的信息吗?

回答

17

的PHP会议系统让你安全地存储数据的$_SESSION全局数组英寸一个典型的例子是用户的识别码存储在会话时,他们在密码输入:

if ($user = try_login($login, $password)) 
    $_SESSION['user'] = $user; 

然后,您可以访问所有其他页面的信息:

if (isset($_SESSION['user'])) 
    // logged in ! 
    echo user_name($_SESSION['user']); 

的数据存储在服务器,所以没有篡改的风险(另一方面,请注意您的磁盘使用情况)。

启动会话让当前请求使用$_SESSION。如果这是用户的第一次访问,则该数组将为空,并且会为您发送新的会话cookie。

关闭会话只会阻止当前的请求使用$_SESSION,但数据会留待下一个请求。

销毁会话会永远扔掉所有的数据。会议在上次访问后的一段时间内(通常约30分钟)被销毁。

+0

噢好吧。所以它是一个空的全局数组,您可以使用它来存储用户值(或其他值),以保持其在网站中的独特体验。 – Scott 2010-10-25 14:56:32

2

PHP的在session_start开始或恢复HTTP会话,这是本文中介绍的还算不错:

http://en.wikipedia.org/wiki/Session_(computer_science)

一个HTTP“会话”的概念是不特定于PHP,它在许多的二手(所有?)服务器端HTTP框架作为允许某些状态跨不同请求/响应进行存储/关联的一种方式(因为HTTP是无状态的)。唯一的令牌(通常但不总是存储在cookie中)标识特定的客户端,服务器可以关联“会话”。

下面是关于特别会议和PHP,可以帮助一些更多的信息:http://www.php.net/manual/en/book.session.php

2

像它说,在手册

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

如果您在您的登录页面启动一个新的会话,会话初始为空。您可以随心所欲地存储它,例如,在用户登录后存储用户标识。会话数据在关闭会话时被销毁。

您可能需要阅读的Session Extension Manual Pages所有章节,也看到

9

我假设你想知道PHP会话对你来说意味着什么,程序员。

当你做session_start()时,你告诉PHP你想使用会话。这可作为一个名为$ _SESSION的数组提供给您。你可以像使用其他数组一样使用它,区别在于你放置在那里的东西从一个页面到另一个页面(只要在每个页面的开始处使用session_start())。

实际机制可能因配置而异(php.ini),但典型的安装可以使用cookie进行会话。假设您的网络服务器在Linux上,并且您正在使用Cookie。您做以下

session_start(); 
$_SESSION['name']='Bob'; 

当PHP看到这一点,创建一个具有半随机名称的文本文件(例如sess_a3tfkd5558kf5rlm44i538fj07),坚持在那里的$ _SESSION内容为纯文本,然后发送一个cookie的用户与会话ID,可用于查找会话文件(例如a3tfkd5558kf5rlm44i538fj07)。

当用户下一次回来时,他将手中的会话ID放在他的cookie中,PHP会转到相关文件并将其内容加载到$ _SESSION中。

你会注意到,实际的信息保存在服务器上,而用户只有一个ID。有点像在俱乐部里穿上你的外套,拿到一张带有号码的票。

+0

因此,如果我在每个页面上启动会话,PHP如何知道从最后一页的$ SESSION变量维护相同的信息,该cookie? – Scott 2010-10-25 15:42:05

+1

@Scott - 如果用户有一个会话ID匹配现有会话(现有会话文件)的cookie,session_start()将恢复会话。否则它开始一个新的。 – 2010-10-26 08:27:20

0

您可以比较PHP会话和cookie,但会话是更安全的存储信息的方式。 Cookie将数据存储在用户计算机上,但安全地将会话存储在服务器上的临时文件中。 我已经讨论会议,以及如何使用它在我的博客文章之一 - How to start a PHP session, store and accessing Session data?

下面是PHP会话存储数据的示例代码:

<?php 
session_start(); 
$_SESSION["name"] = "John"; 
?> 

下面是retriving会话数据的例子:

<?php 
session_start(); 
echo $_SESSION["name"]; 
?> 

上述代码将显示名称“John”。

来源:How to start a PHP session, store and accessing Session data?