【PHP Cookie&&Session】

大部分的人都知道Cookie,但是可能不了解Session,现在对这两者进行解释。

问题的提出:

有些网站会提示用户在一定的时间之内免登陆,这是用的什么技术?答案是Cookie技术。

有些购物网站会提示用户将物品放入购物车之后在不购买就会自动删除物品,这是用的什么技术?答案是Session。

PHP作为一门服务器脚本语言,对这两种技术做了详细的说明。

在介绍之前应当说明会话的概念:

所谓会话,通俗的理解就是打开浏览器,访问某个网站的很多页面(通过点击超链接完成),关闭浏览器后,一个会话就结束了。

会话和cookie和session都有着密切的关系。

一、Cookie

Cookie是保存在客户端的一些文件。文件中可能记录着用户的用户名和密码,视频播放的进度或者其它信息。

PHP中,保存的Cookie是一个个的键值对,还有时间。

1.1保存Cookie:

setCookie(name,value,time);

举例:setCookie("username","zhangsan",Time()+3600);这句话的意思就是将名字为username,值为zhangsan的信息保存在文件中,时间是当前时间+3600s,就是说3600s之后就会失效。

1.2查看Cookie:

$cookie=$_COOKIE[‘name‘];//$_COOKIE是九种预定义超全局数组中的一种

1.3删除Cookie:

1.3.1删除指定的键值对。

setCookie("username","",Time()-1);//只要是-号就可以

1.3.2删除所有的键值对

使用for循环

foreach($_COOKIE as $key=>$val)
{
  setCookie($key,"",time()-100);
}

1.4Cookie的生命周期

如果不指定时间,那么Cookie的生命周期默认为一次会话结束之后就自动结束,即清空Cookie。

1.5Cookie支持中文吗?

Cookie支持中文,只是在保存的时候,使用了urlencode编码,在文件中看到的是乱码;读取的时候自动使用urldecode解码,恢复正常。我们可以使用urldecode方法手动验证。

1.6在查看上次登录时间的时候发现相差8个小时

使用的是格林尼治时间,和北京时间相差8个小时,所以要修改默认时区,修改方法:

方案1:在php文件中设置。
date_defult_timezone_set("Asia/Chongqing");
方案2:在php.ini文件中设置。
使用timezone查找,设置为Asia/Chongqing。

1.7小案例

setCookie.php

1 <?php
2     header("content-type:text/html;charset=utf-8");
3     setCookie("name","张三",Time()+15);
4     setCookie("age","21",Time()+3600);
5     setCookie("password","5a6f38",Time()+7200);
6     echo "Cookie保存成功!";
7 ?>

showCookies.php

 1 <?php
 2 header("content-type:text/html;charset=utf-8");
 3 echo "<pre>";
 4 print_r($_COOKIE);
 5 echo "</pre>";
 6 echo "<br/>";
 7 $name=$_COOKIE[‘name‘];
 8 if(!empty($name))
 9 {
10     echo "name={$name}";
11 }
12 else
13 {
14     echo "cookie已经失效!";
15 }
16 ?>

二、session

什么是session?

session是一中服务器端的技术,这种技术将用户的相关信息保存到了服务器端的文件。

问题的提出:

思考问题:

问题1:我们在浏览网站,去购物的时候,张三和李四,可以购买不同的商品,并且在查看购物车的时候,可以看到各自购买的商品。这该怎么实现?

思路:

1.数据库。
分析:代价高昂,不可行。
2.cookie
安全性不高/在网络传数据(产生带宽的问题)。
3.解决之道->session

问题2:

网站安全性的问题?
用户无需登录就可以到我们的管理页面,并且可以对用户进行增删改查 crud操作。
这个漏洞用session来解决。

2.1添加操作。

session_start();//这个动作如果是在会话除,会创建一个文件,保存在服务器端,如果已经在会话中了,则不会再创建。

$_SESSION[‘name‘]=value;

所以session中保存的也是键值对,保存的时间需要到php.ini中修改。

2.2修改操作。

和添加操作相同。

2.3删除操作。

2.3.1删除指定的键值对。

unset($_SESSION[‘name‘]);

2.3.2删除所有的键值对,同时也会删除文件。

session_destroy();

2.4查找操作。

$session=$_SESSION[‘name‘];

2.5支持的数据类型

支持所有的数据类型,包括数组、对象。

2.6生命周期。

session的生命周期又称为发呆时间,PHP中默认为1440s,一旦超过这个时间而不用,数据将会自动被删除;一旦开始用,即使是最后一秒也会重新开始计算。

修改方法:到php.ini文件中修改。

搜索项:session.gvc_maxlifetime=1440

2.7session文件的保存路径。

可以自定义路径,修改方法:

在php.ini文件中查找session.save_path,修改后重启Apache即可。

2.8总结session的用处:

session可以用来做什么事情?
2.8.1.网上商城中的购物车
2.8.2.保存登录用户的信息
2.8.3.将某些数据放入到session中,共同一用户的各个页面使用
2.8.4.防止用户非法登录到某个页面。

2.9session使用的注意事项。

使用session必须初始化。即session_start();

也可随意在php.ini文件中配置session.auto_start=1,但是不推荐。

2.10为什么在一个会话未结束之前,可以使用多个不同的网页访问同一个session文件?

第一次创建session的时候,会自动创建一个cookie文件,告诉浏览器session文件的名称,浏览器在向服务器发送请求的时候会自动带上Cookie信息。

2.11Cookie禁用后,如何使用session

为什么禁用Cookie之后无法使用session?

原因:禁用cookie之后,浏览器无法接受服务器的set cookie,无法获取sessionid

解决方法:

方法1:

使用$sid=session_id();方法获取当前session文件的id号,并且使用

$sid=$_GET[‘sessionid‘];
if(!issert($sid))
{
session_id($sid);
}
session_start();

确认是否需要新建session文件。

方法2:

使用全局变量SID,这将会简化上一种方法的操作。

方法3:

配置PHP文件。

session.use_trans_sid指定是否启用session透明支持。

如果设置true,则在使用header重定向或者超链接的时候,就会自动拼接SID

注意,使用js实现页面跳转的时候,不会自动拼接,需要手动指定。

2.12session小案例。

网上购物:

MyHall.php:程序入口

 1 <?php
 2 echo "<h1>欢迎来到购物商城</h1>";
 3 echo "<br/><br/>";
 4 echo "<a href=‘ShopProcess.php?bookid=sn001&bookname=红楼梦‘>红楼梦</a><br/><br/>";
 5 echo "<a href=‘ShopProcess.php?bookid=sn002&bookname=西游记‘>西游记</a><br/><br/>";
 6 echo "<a href=‘ShopProcess.php?bookid=sn003&bookname=三国演义‘>三国演义</a><br/><br/>";
 7 echo "<a href=‘ShopProcess.php?bookid=sn004&bookname=水浒传‘>水浒传</a>";
 8 echo "<br/><hr/>";
 9 echo "<a href=‘ShowCart.php‘>查看购买的商品</a><br/><br/>";
10 echo "<a href=‘DelCart.php‘>删除购买的商品</a>";
11 ?>

DelCart.php:清空购物车

1 <?php
2     session_start();
3     session_destroy();
4     echo "删除全部商品成功!<br/><br/>";
5     echo "<a href=‘MyHall.php‘>返回购物界面</a>";
6 ?>

ShopProcess.php:接收请求并重定向

 1 <?php
 2 //初始化session
 3 $bookid=$_GET[‘bookid‘];
 4 $bookname=$_GET[‘bookname‘];
 5 //echo "$bookid:$bookname<br/>";
 6 session_start();
 7 $_SESSION["{$bookid}"]=$bookname;
 8 echo "购买成功!<br/><br/>";
 9 echo "<a href=‘MyHall.php‘>返回继续购买</a>";
10 ?>

ShowCart.php:查看购物车

 1 <?php
 2 //初始化session
 3 session_start();
 4 //取出session中的内容,利用数组循环遍历
 5 print_r($_SESSION);
 6 echo "<br/><br/>";
 7 foreach($_SESSION as $key=>$val)
 8 {
 9     echo "书号:$key&nbsp;&nbsp;&nbsp;书名:$val<br/><br/>";
10 }
11 echo "<a href=‘MyHall.php‘>返回购物界面</a>";
12 ?>

案例二:代码演练:并非小项目,需要单独运行。

save.php:保存数据

 1 <?php
 2 //现在开始演示怎样保存数据到session文件
 3 require_once ‘Dog.class.php‘;
 4 //1.初始化session
 5 session_start();
 6 echo "当前session文件的ID号是:".session_id()."<br/>";
 7 //2.保存数据。
 8 $_SESSION[‘name‘]="张三";
 9 $_SESSION[‘age‘]=123;
10 $_SESSION[‘isboy‘]=false;
11 $_SESSION[‘salry‘]=15000.00;
12 $_SESSION[‘array‘]=array("你好",123,456.0,false);
13 $dog=new Dog("小狗",12,"boy");
14 $_SESSION[‘dog‘]=$dog;
15
16 echo "保存成功!";
17
18 ?>

del.php:删除数据

 1 <?php
 2 /*
 3 这是专门针对删除session的操作
 4 */
 5 //引入文件
 6 require_once ‘Dog.class.php‘;
 7 //session初始化
 8 session_start();
 9 echo "当前session文件的ID号是:".session_id()."<br/>";
10 //删除方法1:只删除一个元素
11 //举例:只是删除姓名:name
12 unset($_SESSION[‘name‘]);
13 echo "删除姓名之后的结果是:<br/>";
14 show();
15 //全部删除
16 session_destroy();
17 echo "<br/><br/>删除所有session数据之后:<br/>";
18 show();
19
20 function show()
21 {
22     echo "当前session文件的ID号是:".session_id()."<br/>";
23     echo "<pre>";
24     print_r($_SESSION);
25     echo "</pre>";
26
27     echo "<br/><br/>";
28     echo "显示姓名:".$_SESSION[‘name‘]."<br/>";
29     echo "显示年龄:".$_SESSION[‘age‘]."<br/>";
30     echo "显示判断:".$_SESSION[‘isboy‘]."<br/>";
31     echo "显示薪水:".$_SESSION[‘salary‘]."<br/>";
32     echo "显示数组:<br/>";
33     $array=$_SESSION[‘array‘];
34     foreach($array as $key=>$val)
35     {
36         echo $key."=>".$val."<br/>";
37     }
38     echo "<br/>";
39
40     echo "显示对象:<br/>";
41     $dog=$_SESSION[‘dog‘];
42     echo "小狗的名字是:".$dog->getName()."<br/>";
43 }
44 ?>

Dog.class.php:类文件

 1 <?php
 2 class Dog
 3 {
 4     private $name;
 5     private $age;
 6     private $sex;
 7     public function __construct($name,$age,$sex)
 8     {
 9         $this->name=$name;
10         $this->age=$age;
11         $this->sex=$sex;
12     }
13     public function getName()
14     {
15         return $this->name;
16     }
17 }
18 ?>

modify.php:修改数据

 1 <?php
 2 //引入文件
 3 require_once ‘Dog.class.php‘;
 4     //初始化session
 5     session_start();
 6     echo "当前session文件的ID号是:".session_id()."<br/>";
 7     //现在将姓名改为郑纪佳,并显示。
 8     $_SESSION[‘name‘]="李四";
 9     echo "将姓名改为李四之后的结果是:<br/>";
10     show();
11
12     function show()
13 {
14     echo "<pre>";
15     print_r($_SESSION);
16     echo "</pre>";
17
18     echo "<br/><br/>";
19     echo "显示姓名:".$_SESSION[‘name‘]."<br/>";
20     echo "显示年龄:".$_SESSION[‘age‘]."<br/>";
21     echo "显示判断:".$_SESSION[‘isboy‘]."<br/>";
22     echo "显示薪水:".$_SESSION[‘salary‘]."<br/>";
23     echo "显示数组:<br/>";
24     $array=$_SESSION[‘array‘];
25     foreach($array as $key=>$val)
26     {
27         echo $key."=>".$val."<br/>";
28     }
29     echo "<br/>";
30
31     echo "显示对象:<br/>";
32     $dog=$_SESSION[‘dog‘];
33     echo "小狗的名字是:".$dog->getName()."<br/>";
34 }
35 ?>

show.php:显示数据

 1 <?php
 2 require_once ‘Dog.class.php‘;//这句话不能省略,非常重要,因为如果没有这句话,就不能显示对象内容
 3 //加载session
 4 session_start();
 5 //显示当前会话的内容。
 6 function show()
 7 {
 8     echo "当前session文件的ID号是:".session_id()."<br/>";
 9     echo "<pre>";
10     print_r($_SESSION);
11     echo "</pre>";
12
13     echo "<br/><br/>";
14     echo "显示姓名:".$_SESSION[‘name‘]."<br/>";
15     echo "显示年龄:".$_SESSION[‘age‘]."<br/>";
16     echo "显示判断:".$_SESSION[‘isboy‘]."<br/>";
17     echo "显示薪水:".$_SESSION[‘salary‘]."<br/>";
18     echo "显示数组:<br/>";
19     $array=$_SESSION[‘array‘];
20     foreach($array as $key=>$val)
21     {
22         echo $key."=>".$val."<br/>";
23     }
24     echo "<br/>";
25
26     echo "显示对象:<br/>";
27     $dog=$_SESSION[‘dog‘];
28     echo "小狗的名字是:".$dog->getName()."<br/>";
29 }
30 show();
31 ?>

三、比较Cookie和session

时间: 2024-10-11 16:11:44

【PHP Cookie&&Session】的相关文章

ASP.Net Core 2.1+ Cookie 登录授权验证【简单Cookie验证】

原文:ASP.Net Core 2.1+ Cookie 登录授权验证[简单Cookie验证] 介绍 本文章发布于博客园:https://www.cnblogs.com/fallstar/p/11310749.html 作者:fallstar 本文章适用于:ASP.NET Core 2.1 + 今天想给一个asp.net core 的项目加上权限验证,于是研究了一下怎么加, 折腾了好一阵,发现原来Filter的方式被放弃了,现在使用Policy 和 Scheme 的方式来校验了... 然后开始猛查

【PHP cookie+function】

COOKIE+自定义函数!!! 实现简单的欢迎效果: xx桑,这是您第n次光临哟 <form name = "msg" method = "POST" action = ""> 请输入id:<input name = "con" type = "text"></input><br /> <input name = "submit" t

【转载】Cookie/Session机制详解

[本文转自]http://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程

【cookie的使用】&amp;【Session】

明确一点:        cookie由服务器创建Cookie cookie=new Cookie("haha","xixi") 通过HtttpServletResponse对象的addCookie(cookie)方法存储到浏览器端.        cookie是一个键值对.cookie不能存中文,若存中文需要编码处理.             ①创建Cookie        Cookie cookie=new Cookie(String key,String v

【转】学习总结--Cookie &amp; Session总结

转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理1)什么是状态管理?   将浏览器与web服务器之间多次交互过程当做一个整体来处理,并且将多次交互所涉及的数据进行管理.2)状态管理技术cookie:    a,什么是cookie?   是一种客户端(浏览器)的状态管理技术.   浏览器在访问web服务器的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这结数据保存下来:当浏览器再次访

【python爬虫】cookie &amp; session

一.什么是cookie? cookie是指网站为了鉴别用户身份,进行会话跟踪而存储在客户端本地的数据. 二.什么是session? 本来的含义是指有始有终的一些列动作,而在web中,session对象用来在服务器存储特定用户会话所需要的属性及信息. 三.cookie和session产生的原因: cookie和session他们不属于http协议范围,由于http协议是无法保持状态,但实际情况,我们有需压保持一些信息,作为下次请求的条件,所有就产生了cookie和session. 四.cookie

分布式架构下的会话追踪实践【基于Cookie和Redis实现】

分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat应用中,通常使用session保存用户的会话数据.面对高并发的场景,一台Tomcat难当大任,通常我们会使用Nginx在前端拦截用户请求,转发给后端的Tomcat服务器群组.在集群环境下,怎么才能做到session数据在多台Tomcat之间的共享呢? 当然我们可以在多台Tomcat之间进行sessi

【JAVAWEB学习笔记】16_session&amp;cookie

会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并   不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器    记住客户端状态(区分客户端) 2.会话技术 从打开一个浏览器访问某

状态保持【Session】

Session 对于敏感.重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名.余额.等级.验证码等信息 在服务器端进行状态保持的方案就是Session Session依赖于Cookie session数据的获取 session:请求上下文对象,用于处理http请求中的一些数据内容 from flask import Flaskfrom flask import redirectfrom flask import requestfrom flask import sessionfrom