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中的内容。

<?php

//输出Cookie中保存的所有用户信息

print_r($_COOKIE);

3、Cookie的数组形态应用

数组也可以利用多维数组的形式,将多个内容值存储在相同Cookie名称标识符下。

<?php

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为已过期

<?php

//只指定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:

<?php

//开启会话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:

<?php

//开启session

// 1. 判断客户端是否有了sessionid 变量名为PHPSESSID, 直接使用这个session id开启会话

// 也不新创建文件了,直接找这个同名session id的session文件

session_start();

echo '<br>';

print_r($_SESSION);

echo '<br>';

echo '<br>';

echo $_SESSION['username'];

代码3:

<?php

//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()."<br>";

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并配置好

<form action=”back.php<?php echo SID ?>” method=”post”>

Name:<input type=”input” name=”username”>

Pass:<input type=”password” name=”pass”>

<input type=”submit” name=”send” value=”登录”>

</form>

转载于:https://blog.51cto.com/sswqzx/1975133

PHP系列(十三)PHP会话控制相关推荐

  1. UDS诊断系列之五 诊断会话控制(10)服务

    诊断会话控制服务,其服务ID是0x10,主要功能为控制服务端的会话模式的切换. 一.诊断会话模式 诊断会话模式分为默认会话模式和非默认会话模式,不同的会话模式所支持的功能.权限.时间参数等等是不一样的 ...

  2. 【STM32】标准库与HAL库对照学习教程十三--软件IIC控制AT24C02

    [STM32]标准库与HAL库对照学习教程十三--软件IIC控制AT24C02 一.前言 二.准备工作 三.AT24C02(EEPROM)介绍 1.AT24C02简介 2.引脚功能 3.设备地址 四. ...

  3. UDS诊断系列之十一 输入输出控制(2F)服务 上

    应粉丝要求,先来更新输入输出控制(2F)服务的内容. 输入输出控制(2F)服务顾名思义就是对输入和输出内容进行控制,这里的输入和输出一般指的是控制器的输入和输出引脚或者设备,例如仪表的各种灯就是仪表控 ...

  4. [单刷APUE系列]第八章——进程控制[1]

    目录 [单刷APUE系列]第一章--Unix基础知识[1] [单刷APUE系列]第一章--Unix基础知识[2] [单刷APUE系列]第二章--Unix标准及实现 [单刷APUE系列]第三章--文件I ...

  5. 三、Flask_会话控制与请求钩子

    1. 会话控制 会话控制: cookie 和 session 在flask中会话控制的保存主要通过request和response来完成 session本质上就是保存在服务端中的一个文件,文件中存储了 ...

  6. 限制会话id服务端不共享_会话控制 - able-woman - 博客园

    会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段.而会话,就是用户通过浏览器和服务器的一次通话. 为什么要有会话控制? 因为HTTP协议是无状态的,服务器不知道用户上一次做 ...

  7. WEB开发中的会话控制

    Session技术是网站技术中不可或缺的一个重点.主要用户跟踪用户的登录信息,实现跨页面传值.为了讲解会话控制,首先也是给同学们展示效果.如果网站地址被公开,如果没有使用session技术的页面一定会 ...

  8. 数学之美 系列十三 信息指纹及其应用

    数学之美 系列十三 信息指纹及其应用 任何一段信息文字,都可以对应一个不太长的随机数,作为区别它和其它信息的指纹(Fingerprint).只要算法设计的好,任何两段信息的指纹都很难重复,就如同人类的 ...

  9. PHP学习总结(会话控制)

    最近刚做完一个简易的登陆注册小项目,当时做的时候匆忙,现在来详细的了解一下PHP会话控制这方面的知识. cookie和seesion技术出现的原因: 当一个用户请求一个页面时,再请求同一个网站上的另外 ...

最新文章

  1. 你,保持童心;我,帮你保持童颜
  2. 使用HTML5的canvas做一个会动的时钟
  3. 深入浅出解释FFT(六)——深入理解fft变换
  4. libevent 安装异常
  5. 排序之二分查找插入排序算法
  6. python 画漫画_在漫画中画一条直线,罗宾逊投影
  7. java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
  8. JavaScrip有哪些优点
  9. C语言volatile关键字—最易变的关键字
  10. PDFMiner:python 读取 pdf 内容
  11. 微软开源 TensorFlow-DirectML,为 WSL2 提供 GPU 支持
  12. 编程语言性能实测,Go 比 Python 更胜一筹?
  13. PAT 乙级 1042. 字符统计(20) Java版
  14. 1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo
  15. 元宇宙需要“基建狂魔”
  16. 乌班图系统重启服务器,3种重启Ubuntu服务器命令方式技巧
  17. HTML5中引入字体样式的常用方法-Iconfont(阿里巴巴矢量图库)和IcoMoon-APP
  18. 一度智信:拼多多怎么投诉商家
  19. input 限制输入2位小数
  20. android 事例源码 搜集

热门文章

  1. mysql表空间自增_Oracle 默认表空间问题及自增变量设置
  2. 小米一元流量magisk_电信流量10G才9.9元?
  3. git 改了一段代码不想要了_想要壁纸不收费吗?简简单单用python代码实现
  4. mysql query语句_使用mysql_query()函数执行SQL语句
  5. 20200703:将有序数组转换为二叉搜索树(leetcode108)
  6. 计算机组成安徽大学,2安徽大学《计算机组成与结构》B卷及答案.pdf
  7. mysql数据库永久链接_PHP使用数据库永久连接方式(mysql_pconnect)操作MySQL的是与非...
  8. excel 相邻数计算机,Excel计算公式大全.doc
  9. 缓存能提高多少 php,提高PHP编程效率 引入缓存机制提升性能
  10. 修改Tomcat窗口名称