关于$_SESSION[]

本文介绍了一个PHP登录系统中会话管理的问题及解决方法。作者详细解释了如何正确使用session_start()来初始化会话,以及如何利用$_SESSION超全局变量来存储和检索数据。此外,还讨论了session_register()的不推荐使用及其替代方案。

在我的程序里:

               在 public function logingoAction() 中有这么几行程序:            

                    session_start(); //开启会话

                           session_unset();//删除会话
       session_destroy();
       session_register('password');//创建会话变量,保存密码
       $HTTP_SESSION_VARS['passowrd']=$password1;
       session_register('username');//保存用户名
       $HTTP_SESSION_VARS['username']=$username1;

          在 public function changepasswordgoAction()中要用$_SESSION['username']中的值,如下:

             $where=$db->quoteInto('username=?',$_SESSION['username'])
        .$db->quoteInto('and password=?',$oldpassword);


 结果,无论在怎么试验,$_SESSION['username']中都没有值。

后来,发现亮点错误:

一:需要在public function changepasswordgoAction()中开启会话,即,添加:  session_start();如果很多的Action()中用到了会话变量,我们可以在 public function init()中统一开启会话:即把 session_start(); 放在 public function init()函数中。

二:在public function logingoAction()中,把   $HTTP_SESSION_VARS['passowrd']=$password1; $HTTP_SESSION_VARS['username']=$username1;

改为:

  $_SESSION['passowrd']=$password1; $_SESSION['username']=$username1;

程序可以成功执行了。




<think>好的,我现在需要帮助用户了解PHP中$_SESSION变量的使用方法。首先,我得回忆一下自己关于$_SESSION的知识,并参考提供的引用内容来确保信息的准确性。 用户的问题是关于$_SESSION的用法,所以我要先整理出基本的使用步骤。根据引用中的信息,使用$_SESSION通常需要以下几个步骤:初始化会话、设置变量、读取变量、删除变量和销毁会话。每个步骤都需要对应的PHP函数或操作。 首先,初始化会话。根据引用3和引用5,必须使用session_start()函数来启动会话。这个函数需要在任何输出之前调用,否则会出现头信息错误。这一点很重要,我需要提醒用户注意代码的位置,比如在文件开头就调用session_start()。 接下来是设置会话变量。引用1和引用3提到,可以通过直接给$_SESSION数组赋值来设置变量,比如$_SESSION['username'] = 'JohnDoe';。这里需要强调$_SESSION是一个超全局数组,可以在脚本的任何地方访问,但必须先启动会话。 然后是读取会话变量。用户需要检查变量是否存在后再使用,避免未定义错误。引用4中的示例使用了isset()函数来检查$_SESSION['logged']是否存在。在引用1中,也演示了如何读取并显示变量,比如echo "Welcome, " . $_SESSION['username'];。这部分需要提醒用户进行存在性检查,以增强代码的健壮性。 删除会话变量的部分,引用1和引用3指出可以使用unset()函数来删除单个变量,比如unset($_SESSION['username']);。而销毁整个会话需要使用session_destroy(),但要注意这不会立即删除所有数据,可能需要手动unset整个$_SESSION数组。引用1中的示例在销毁会话前先删除了变量,这可能是一个好的实践。 另外,会话的持久化和安全性也是需要考虑的。引用中没有提到会话的有效期设置,但我知道可以通过php.ini配置或使用session_set_cookie_params()来设置。安全性方面,需要提到防止会话劫持和固定攻击,比如使用HTTPS、定期更换会话ID等。这部分可能不在提供的引用中,但作为补充内容对用户有帮助。 然后,用户可能需要常见问题的解答。比如会话无法跨页面访问的问题,通常是因为没有在每个页面都调用session_start()。引用2中的示例展示了在其他页面访问$_SESSION前需要开启session功能。另外,数据未保存的问题可能是由于提前输出内容导致session_start()失败,或者没有正确赋值。 现在需要组织这些信息,按照用户的要求分步骤说明,结构清晰,使用中文,并正确应用LaTeX格式。同时,生成相关问题,帮助用户进一步学习。 需要注意引用来源,在适当的位置添加引用标识。例如,在提到session_start()时引用3和引用5,设置变量引用1和3,读取变量引用1、4,删除变量引用1、3,销毁会话引用1,跨页面访问引用2。 最后,生成的相关问题应涵盖会话机制、安全措施、有效期设置、其他超全局变量以及常见错误排查,这样用户可以有更深入的学习方向。</think>### PHP $_SESSION 变量使用方法 #### 1. 初始化会话 必须使用 `session_start()` 函数启动会话,**在所有操作前调用**(需在输出内容前执行): ```php <?php session_start(); // 初始化会话[^3][^5] ?> ``` #### 2. 设置会话变量 通过 `$_SESSION` 超全局数组直接赋值: ```php $_SESSION['username'] = 'JohnDoe'; // 存储用户名[^1] $_SESSION['login_time'] = time(); // 存储登录时间戳 ``` #### 3. 读取会话变量 需先检查变量是否存在: ```php if (isset($_SESSION['username'])) { echo "欢迎," . $_SESSION['username']; // 读取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值