学习要点

  • 会话控制使用的意义
  • 用户跟踪方式
  • Cookie的设置、读取以及删除
  • Session的设置、读取以及删除
  • 自定义session处理方式

会话控制

什么是会话控制

实现服务器跟踪同一个客户端的连续请求。包含两方面内容:

  • 在一个网页中跟踪用户
  • 在多个网页之间共享数据

会话跟踪的方式

HTTP是无状态协议,不能维护两个事务之间的状态。

PHP提供了三种会话跟踪方式:

  • 超链接、隐藏域或者header()函数重定向。
  • Cookie方式,将用户状态信息保持在客户端。
  • Session方式,将用户状态保存在服务器。

简单参数的交互,采用第一种的方式的url的get或者http的post方式实现。

网页需要判断用户信息,一般采用Cookie或者Session技术。

Cookie

Cookie概念

cookie是Web服务器保存在客户端的一系列文本信息

cookie的作用:对特定对象的追踪、统计网页浏览次数、简化登录

安全性:容易信息泄露

Cookie的设置

  • 通过setCookie()函数创建Cookie()。

Cookie信息是HTTP信息头的一部分,因此SetCookie()函数必须在其他信息被输出到浏览器前被调用。

header()函数和setCookie()函数:必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。

  • 语法格式说明
bool  setcookie(name,value,expire,path,domain,secure)

  

  • 示例代码
//cookie常用三个参数设置

setcookie("userName","admin",time()+5*60);

//cookie全参数设置:cookie只在action目录和其子目录有效,子域名有效,仅https中设置cookie

setcookie("userName","root",time()+5*60,"/action",".example.com",1);

  

Cookie的读取

  • 计算机中Cookie的保存位置:

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies

  • 通过$_COOKIE读取Cookie,示例代码:

print_r($_COOKIE);

Cookie数组的设置和读取

将多个键值信息保存在相同的Cookie名称标识下。

示例:

设置cookie

setcookie("user[name]","admin");

setcookie("user[pwd]",md5(123456));

setcookie("user[id]","administrator group");

  

读取cookie:

//print_r($_COOKIE);

foreach ($_COOKIE["user"] as $key=>$value){

   echo $key.":".$value.'<br>';

}

  

删除Cookie

  • Setcookie(cookie名称)

删除同名cookie

  • Setcookie(cookie名称,time()-1)

设置cookie已过期状态。默认cookie生命周期与浏览器生命周期一致。

使用Cookie实现用户登陆跟踪

  • 登陆页面代码:
<?php

error_reporting(0);

/**清除cookie*/

function clearCookies() {

   setcookie ( "userName", '', time () - 1 );

   setcookie ( "isLogin", '', time () - 1 );

}

/**登陆与退出判断*/

if ($_GET ["action"] == "login") {//登陆

   clearCookies ();

   if ($_POST ["userName"] == "admin" && $_POST ["password"] == "8888") {

      setcookie ( "userName", $_POST ["userName"], time () + 7 * 24 * 60 * 60 );

      setcookie ( "isLogin", "1", time () + 7 * 24 * 60 * 60 );

      header ( "location:index.php" );

   } else {

      die ( "用户名或者密码错误" );

   }

} else if ($_GET ["action"] == "logout") {//退出

   clearCookies ();

}

?>

<html>

<head>

<title>用户登录</title>

</head>

<body>

   <fieldset>

      <legend>用户登录</legend>

      <form action="login.php?action=login" method="post">

      <P>账号:<input type="text" name="userName"></P>

      <P>密码:<input type="password" name="password"></P>

      <p><input type="submit" value="登陆"></p>

      </form>

      <p></p>

   </fieldset>

</body>

</html>

  

  • 网站首页代码:
<?php

if (! (isset ( $_COOKIE ['isLogin'] ) && $_COOKIE ['isLogin'] == 1)) {

   header ( "location:login.php" );

   exit ();

}

?>

<html>

<head>

<title>首页</title>

</head>

<body>

<?php

echo "您好:" . $_COOKIE ["userName"] . "  ";

?>

<a href="login.php?action=logout">退出</a>

<p>内容......</p>

</body>

  

上机练习1:使用用cookie实现免输入用户名密码登录

需求说明:登陆成功后,5分钟内再次访问登陆页面实现免输入账号密码登录。

Session

相关概念

  • Session的中文译名叫做“会话”,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
  • Session通过SessionID来识别用户。PHP服务器生成SessionID,保持在tmp目录中,以文件形式存在。客户端以cookie或者url保存SessionID,每次用户访问的时候,通过检测客户端和服务器端的sessionid是否一致来确认同一用户。
  • 当客户端禁用COOKIE时(点击IE中的“工具”—“internet="">Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过php5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能。
  • Sessoin将用户信息存储在服务器端。安全性高。

配置Session

  • 打开php.ini文件中[Session]配置信息
session.auto_start = 0 ;   #是否自动启动session,按照默认值方式。如果设置为1,则session无法存储对象。

session.save_handler = files   ;   #session的文件储存方式

session.save_path = /tmp ;    #session的保存路径

session.use_cookies = 1 ;   #使用cookie在客户端保存sessionid

session.name = PHPSESSID ;   #sessionid命名规则

session.cookie_lifetime = 0 ;   #sessionid的cookie生存时间,0代表直到浏览器关闭

session.cookie_path = / ;   #sessionid的cookie路径

session.cookie_domain = ;   #sessionid的cookie域名

session.serialize_handler = php ;   #使用PHP序列化机制

session.gc_maxlifetime = 1440 ;   #session文件的保存时间

  

Session的声明与使用

  • 启动session
bool  seseion_start()

  

  • 注册session
$_SESSION[];

  

  • 示例代码

session注册对象类型数据需要注意:1、确认配置文件中的序列化和反序化机制已经配置;2、如果第1点没有配置,则使用serialize()和unserialize();3、注册和读取对象的脚本中需要引入对象的类脚本文件。

用户信息保存在session.save_path设定的目录下,文件名为:sess_sessionid,文件格式为:

变量名|类型:长度:值

例如:

userName|s:5:"admin";userID|i:1001;

Session的销毁与变量的注销

  • 当使用完$_SESSION中的变量后,可以对其注销和删除。

    当完成一个会话后,可将会话销毁。

  • Session完全注销过程:

    1、删除session变量:

      逐个删除:unset($_SESSION[varname])

      或者:

      全部删除:$_SESSION=array();

    2、删除客户端cookie中的sessionid:

      Setcookie(session_name());

    3、销毁服务器上存储的sesssion信息:

      Bool  session_destroy ( void )

示例代码:

//第一步:开启session并初始化

session_start();

//第二步:删除所有session变量,或使用unset($_SESSION[*])逐个删除

$_SESSION=array();

//第三步:删除基于cookie的session信息

if(isset($_COOKIE[session_name()])){

   setcookie(session_name(),'',time()-1,'/');

}

//第四步:销毁session

session_destroy();

  

上机练习2:使用session实现用户的登陆跟踪

需求说明:

1、定义系统用户类,包含属性:账号、密码、是否是管理员

2、登陆成功后初始化用户:管理员对象和普通用户对象。将用户对象保存在session中,跳转到管理后台页面。

3、管理后台页面读取session中的用户信息,个性化显示用户网页内容。

Session的自动回收机制

  • Session垃圾文件自动回收

如果客户端没有正常退出会话,服务器端保留的Session文件不会被删除。

如果没有被SessionID引用的服务器端Session文件,就成为“垃圾”Session文件。

PHP服务器根据session.gc_maxlifetime指定的时间去检测服务器中的session文件,如果session文件的修改时间大于这个时间,PHP服务器便会清除相应的session文件。

  • 垃圾回收机制何时启动

每次执行session_start()函数就会启动php的垃圾回收机制,如果一个项目有多个页面,多个session_start()被频繁访问,则垃圾回收机制就会被频繁启动,影响系统性能。

可以通过设置php.ini来减少垃圾回收机制的启动频率。

推荐值:session.gc_probaility=1

推荐值:session.gc_divisor=[1000~5000]

垃圾回收启动频率= Session.gc_probaility/ Session.gc_divisor

PHP13 会话控制的更多相关文章

  1. 会话控制:session与cookie

    我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...

  2. php 会话控制

    会话控制 HTTP协议,在TCP协议基础上的HTTP协议称为无状态协议 SESSION COOKIE SESSION特点:1.存储在服务器.2.每个使用者都会生成一个SESSION.3.有默认的过期时 ...

  3. (实用篇)php通过会话控制实现身份验证实例

    会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...

  4. 会话控制:SESSION,COOKIE

    1.http协议: HTTP—超文本传输协议,在TCP协议(长连接.像一个硬件)基础上; 特点:短连接,无状态协议,没法记录本次连接的状态;适用于静态页面的访问,对于后期某些页面是需要浏览器预知客户信 ...

  5. PHP之自定义会话控制---使用文件处理

    前三篇简单的总结了下会话控制和文件操作,这一篇说说会话控制的自定义处理方式.既然知道了文件的基本读写,而且在会话控制中,也有人提到,session数据可以保存到缓存或数据库中,实际上当然不会是直接利用 ...

  6. PHP之会话控制小结

    会话控制是一种跟踪用户的通信方式,使用会话控制主要基于以下几点:由于http协议的无状态性,使得不能通过协议来建立两次请求之间的关联:对于通常的页面之间的数据传递方式get和post而言,主要处理参数 ...

  7. php——会话控制

    1.什么叫做会话控制 允许服务器根据客户端做出的连续请求. 2.为什么需要会话控制? 因为当你打开一个网站,并想访问该网站的其他页面的时候,如果没有会话控制,当跳转到其他页面的 时候,就需要再次输入账 ...

  8. PHP会话控制Session与Cookie

    理解会话控制的概念: 阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是 ...

  9. (详细)php实现留言板---会话控制-----------2017-05-08

    要实现留言功能,发送者和接受者必不可少,其次就是留言时间留言内容. 要实现的功能: 1.登录者只能查看自己和所有人的信息,并能够给好友留言 2.留言板页面,好友采取下拉列表,当留言信息为空时,显示提示 ...

随机推荐

  1. wcf中事务的操作

    using System; using System.ServiceModel; namespace Larryle.Wcf.ServiceContract.Transaction { [Servic ...

  2. CodeForces - 55D && UVALive - 6528

    A. 问L到R有多少能被自己各个数位上的非零数字整除的数字. 关键在于dp的状态:注意到这里有三个关键属性:当前数位,2~9出现的情况(0,1不用管), 原数字取余2520的结果(2~9的最小公倍数) ...

  3. mql4入门(1)

    博主比较忙,因此也就抽空写写.等最后全部写完了再汇总一下.     说到金融,我想肯定有很多人印象里就是一个不太大的大厅,一群交易员望着一堆背景为黑的曲线图的场景. 比如这样     但是试想一下,交 ...

  4. Codeforces34C【尺取】

    题意: 输入一系列的数,连续数字则输出连续区间 看第一个案例就很明显 思路: 输入字符串输入,预处理一下. 写了个挫尺取- 贴一发挫code--. #include <bits/stdc++.h ...

  5. hdoj1575【矩阵快速幂】

    题意:非常清晰! 直接搞吧. #include <iostream> #include <stdio.h> #include <string.h> #include ...

  6. 一个关于国密SM4的故事

    一个关于国密SM4的故事 我的名字叫SM4,我还有三位兄长,分别是大哥SM1, 二哥SM2, 和三哥SM3.说起我的名字,故事要回到2006年的时候,我出生的时候并不是叫SM4的,而是叫做SMS4.只 ...

  7. shiro之自定义realm

    Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authenticsto认证--->Realm验证 ...

  8. centOS 部署服务器(一)

    接下来我所写的博客仅仅是为了记录我的学习过程,与其他无关. 由于公司换用了亚马逊服务器,用的是它的RDS数据库,所以就没有像以前的项目部署的时候使用mysql,不过要下载安装mysql-proxy,字 ...

  9. c语言读取一个文件夹下的全部文件(jpg / png 文件)

    #include <cstdio> #include <cstring> #include <unistd.h> #include<dirent.h> ...

  10. B. Connecting Universities DFS,无向树

    http://codeforces.com/problemset/problem/700/B 题意是,在一颗树中,有k个大学,要求两两匹配,他们之间的距离作为贡献,使得距离总和最大. 一开始的时候无从 ...