admin 管理员组

文章数量: 887007

PHP会话控制

后台代码 - 会话控制

关于用户的功能:登录、注销:注册、修改密码、上传头像、签名信息

让浏览器记住用户的登录状态。

Cookie

向浏览器写入Cookie信息

将用户的登录状态写到浏览器的Cookie中。

向客户端电脑的浏览器中设置Cookie

setcookie('username',$uName,time()+60*60);
//设置Cookie 成功,返回true;否则,返回false
//uName=ajest
//  time() 显示当前时间(unix时间)
参数名字含义
name名称Cookie名称
value这个值储存于用户的电脑里,请勿存储敏感信息。
expire过期时间这个是Unix时间截。如果设置成零,或者忽略参数,Cookie会在会话结束时过期(也就是关掉浏览器时)。
path有效路径设置成 / 时,Cookie对整个域名domain有效。如果设置成/bbs/,Cookie仅仅对domain 中 /bbs/目录及其子目录有效(如果/bbs/member/)。设置值是设置Cookie时的当前目录。
domain有效域名设置成子域名(例如www.example),会使Cookie对这个子域名和它的三级域名有效(例如 w2.www.example)。要让Cookie对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是example)
secureHTTPS设置成TRUE时,只有安全连接存在时才会设置Cookie,如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类Cookie(通过 $_SERVER["HTTPS"]判断)。
httponly 设置成TRUE,Cookie仅可通过HTTP协议访问。这意思就是Cookie无法通过类似JavaSCript这样的脚本语言访问。要有效尖山XSS攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常会有争议。PHP5.2.0中添加。TRUE或FALSE

读取Cookie信息

var_dump($_COOKIE);

注销Cookie信息

删除Cookie信息,就意味着退出登录。

删除Cookie信息,就是让Cookie失效。

if(setookie('username','',time()-3600) && setookie('id','',time()-3600)){header("location./index.php");
}else{echo "Erroe";
}

使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致

完善user表

用户的密码

原来user表中的用户密码是以明文方式存储,这是非常严重的安全隐患。考虑将user表中的password字段采用加密方式存储。

一般采用MD5,加密处理。MD5单项hash加密算法。

update user set password=md5('123456');

增加头像信息

头像是图片

数据库能存图片,但是,数据库中存储的不是图片内容,而是图片的路径。

session

开启session

session_start()
  • 开启一个会话
    • 一个客户到超市里买东西办会员卡!
  • 打开已经存在的会话
    • 当这个客户以后再到超市买东西的时候根据上次办的卡号买东西!根据客户端传来的sessionid,把这个sessionid对应的数据读取到$_SESSION这个变量里面

获取和修改session

$_SESSION

销毁session

session_destory();

关键参数

session.save_path           //;session.save_path = "/tmp"
session.name                //session.name = PHPSESSID

关键函数

session_name();                    //读取/设置会话名称
session_id();                      //读取/设置当前会话  ID

关于SESSION

  • session是-种会话管理技术。PHP中对SESSION技术做了支持。
  • SESSION技术简单的说就是将会话信息存放再服务器中。
  • 要使用session技术,需要在每个使用session会话控制的页面首行(也不一定是首行),写入session_ start()函数。该函数会检测客户端请求页面时,是否传递了sessionId。

初次登陆网站

  • session_ start() 函数会下发sessionld,并存储再Cookie信息中(也就是说,SESSION 技术的实现需要Cookie的支持)。
  • 可以使用函数session_ name() ,读取sessionld 的名字。
  • 并且,sessionId 的名字写在php. ini配置文件中,也可以自定义sessionId。
  • 函数session_ start() 再下发sessionId的时候,也会创建sessionId随机值,可以通过函数session id() 读取到。与此同时,会在缓存目录下生成相应的session缓存。
  • 关于缓存目录,可以通过php. ini的选项配置。

重用sessionid

  • 可以通过预定义超全局数组变量$_ SESSION, 完成session 信息的读写。尝试写入session变量,并更新session缓存。
  • 尝试读取SESSION变量,读取session 变量的时候就比较有意思了。注意URL地址!
  • 关闭浏览器就意味着COOKIE失效,那么就会读取不到刚才的SESSION信息。因为sessionld 已经失效了。session_ start() 函数会重新分配sessionld。
  • 值得注意的是session缓存依旧在服务器中。
document.cookie="PHPSESSID=p0t201gtnkllbem23g326on8t1";
  • session的销毁,直接使用session_ destory() 函数即可。运行此函数,服务器会删除session缓存,但是Cookie信息依然存在。

本文标签: PHP会话控制