PHP系列(十三)PHP会话控制
2021-05-19 19:27
标签:session php会话控制 一、cookie 1、会话控制之Cookie概述 cookie是在http协议下,服务器或脚本可以维护客户端信息的一种方式。 Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上。常用于保存用户名,密码,个性化设置,个人偏好记录等。当用户访问服务器时,服务器可以设置和访问cookie的信息。 cookie保存在客户端,通常是IE或Firefox浏览器的cookie临时文件夹中,可以手动删除。注意:如果浏览器上cookie太多,超过了系统所允许范围,浏览器也会自动对它进行删除 2、Cookie的操作 设置Cookie 语法:bool setcookie(string name,[string value,[intexpire,[string path,[stringdomain,[intsecure]]]]]);本cookie函数可以有6个属性,常用的有3个参数。 //向客户端发送一个Cookie,将变量username值为skygao,保存客户端一周的时间 setcookie("username","skygao", time()+60*60*24*7); //使用setCookie()函数的全部参数设置 setcookie("username","skygao", time()+60*60*24*7, "/test",".example.com", 1); setcookie参数解释 参数描述示例 name 名字调用名为cookiename的cookie value 值假设第一个参为cookiename,通过$_COOKIE[‘name’取得值] exprice 有效时间设置cookie的过期时间和日期,用一个标准的Unix时间标记,可以用time()函数取得,以秒为单位. path 范围服务器端的有效路径,设置为“/”表示这个域中所有数组都可以被访问读取。 domain 域名设定cookie有效域名 secure 指明cookie只能通过安全的 https传送设为true时只能使用安全的https,默认为false,即设置是否仅在https安全连接时才发送cookie到客户端,0或1。 读取Cookie 如果Cookie设置成功,客户端就拥有了Cookie文件,用来保存Web服务器为其设置的用户信息。 在PHP中读取Cookie信息很简单,使用超全局数组 $_COOKIE[‘cookie名’]即可获取cookie中的内容。
//输出Cookie中保存的所有用户信息 print_r($_COOKIE); 3、Cookie的数组形态应用 数组也可以利用多维数组的形式,将多个内容值存储在相同Cookie名称标识符下。 setcookie("user[username]","skygao"); //$_COOKIE["user"]["username"] setcookie("user[password]",md5("123456")); //$_COOKIE["user"]["password"] setcookie("user[email]","skyga@lampbrother.net");//$_COOKIE["user"]["email"] //遍历$_COOKIE[“user”]数组 foreach($_COOKIE["user"]as $key => $value){ //输出Cookie数组中二维的键值对 echo$key.":".$value."\n"; } 4、删除Cookie 有2种方式删除Cookie –1.省略setcookie()函数的所有参数列 –2.设置cookie为已过期 //只指定Cookie识别名称一个参数,即删除客户端中这个指定名称的Cookie资料 setCookie("account"); //第一种方法 //设置Cookie 在当前时间过期,因此系统会自动删除识别名称为isLogin的Cookie setCookie("isLogin", "", time()-1); //第二种方法 二、session 1、会话控制session的工作机制 Session和Cookie相似,都是用来储存使用者的相关资料。但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下。 cookie和session在php中的使用区别: – cookie和session都可以暂时保存在多个页面中使用的变量,但是它们有本质的差别。 cookie存放在客户端浏览器中, session保存在服务器上。 –它们之间的联系是session ID 一般保存在cookie中,或者放在URL上。 禁用cookie的方法: –点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用. 2、session的应用 Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()。 session_start()函数的语法格式如下 – Bool session_start(void) –注意:session_start()函数之前不能有任何输出 Session以数组的形式使用 –如:$_SESSION[‘session名’] session_start(); //启动Session 的初始化 $_SESSION["username"]= "skygao"; //注册Session 变量,赋值为一用户名称 $_SESSION["uid"]= 1; //注册Session 变量,赋值为一个用户的ID 注册一个会话变量和读取Session 在PHP中使用Session变量,除了要启动之外,还要经过注册的过程。注册和读取Session变量,都要通过访问$_SESSION数组完成。 在$_SESSION关联数组中的键名具有和PHP中普通变量相同的命名规则。 Session变量会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下。 注销变量与销毁Session 1.bool session_destroy(void) –删除服务器端保留session信息的文件 2.unset($_SESSION[‘键名’]) –删除内存中由Session数组保存的变量 –清除所有变量可以使用 $_SESSION=array() 3.如果session是基于Cookie的,那么我们还需要删除客户端保留的cookie文件 代码1:
//开启会话session(cookie不用) //session_start()前面不能有任何输出, 这个函数向客户端发一个session_id保存在cookie中 // 还在服务器中创建一个和保存在客户端同名的session文件(文本) session_start(); //使用$_SESSION这个数组 $_SESSION[‘username‘]="jons"; $_SESSION[‘age‘]=18; $_SESSION[‘sex‘]="nv"; $_SESSION[‘lx‘][‘email‘]="mz@aaa.com"; $_SESSION[‘lx‘][‘phone‘]=‘119‘; echo $_SESSION[‘username‘]; 代码2:
//开启session // 1. 判断客户端是否有了sessionid 变量名为PHPSESSID, 直接使用这个session id开启会话 // 也不新创建文件了,直接找这个同名session id的session文件 session_start(); echo ‘ print_r($_SESSION); echo ‘ echo ‘ echo $_SESSION[‘username‘]; 代码3: //1开启会话session 1 session_start(); //多余的 $username= $_SESSION[‘username‘]; //unset($_SESSION[‘username‘]); //2就可以删除数组中的所有内容, 即session对应的这个用户文件的内容就空了 $_SESSION= array(); //删除客户中cookie听sessionid if(isset($_COOKIE[session_name()])){ setCookie(session_name(),"", time()-3600, "/"); } //4销毁session session_destroy(); echo"再见:{$username}"; 3、Session的配置选项 配置Session php.ini文件和Session有关的几个常用配置选项 – session.auto_start = 0 ; 在请求启动时初始化session – session.cache_expire= 180 ; 设置缓存中的会话文档在 n 分钟后过时 – session.cookie_lifetime = 0 ;设置按秒记的cookie的保存时间, 相当于设置Session的过期时间,为0时表示直到浏览器被重启 – session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。 –session.cookie_path = / ; cookie的有效路径 –session.cookie_domain = ; cookie的有效域 – session.name =PHPSESSID;用在cookie里的session的名字 –session.save_handler = files ; 用于保存/取回数据的控制方式 – session.save_path= /tmp ;在 save_handler 设为文件时传给控制器的参数,这是数据文件将保存的路径. –session.use_cookies = 1 ; 是否使用cookies 4、Session的自动垃圾回收机制 php.ini中相关的配置 – session.cookie_lifetime=0; 关闭浏览器相应的cookie文件即被删除 – session.gc_maxlifetime=1440;设置过期session时间,默认1440秒(24分钟) –session.gc_probability/session.gc_divisor;启动垃圾回收机制的概率(建议值为1/1000~5000) 代码: //开启会话session(cookie不用) //session_start()前面不能有任何输出, 这个函数向客户端发一个session_id保存在cookie中 // 还在服务器中创建一个和保存在客户端同名的session文件(文本) // 调度PHP的机制使用session session_start(); //使用$_SESSION这个数组 $_SESSION[‘username‘]="jons"; $_SESSION[‘age‘]=18; $_SESSION[‘sex‘]="nv"; $_SESSION[‘aaaaaaaa‘]="bbbbbbbbbbbbbbb"; $_SESSION[‘lx‘][‘email‘]="mz@aaa.com"; $_SESSION[‘lx‘][‘phone‘]=‘119‘; echosession_name()." = ".session_id()." 5、基于URL传递session的id 为啥要使用URL传session id 基于cookie的方式传递session id 这种方式更优。 但不总是可用,因为用户在客户端可以屏蔽cokie; 什么是基于url传session id 是通过url参数进行传递 直接将session id嵌入到url中去 参数规则 Session_name()和session_id()应用 常量SID的使用 URL加session id也是自动的 在使用Linux系统做服务器时,在编辑PHP时,打开—enable-trans-sid配置选项,和运行时选项session.use_trans_sid=1激活,在客户端禁用cookie时,相对的url将被自动修改为包含sessionid, 如果没有配置,或使用windows系统作为服务器时,可以使用常量SID. 建议使用Linux并配置好
Name: Pass: 登录”>
本文出自 “Linux狱长” 博客,请务必保留此出处http://sswqzx.blog.51cto.com/2494644/1975133 PHP系列(十三)PHP会话控制 标签:session 原文地址:http://sswqzx.blog.51cto.com/2494644/1975133
‘;
‘;
‘;
";
下一篇:index.html