大部分的人都知道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

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

showCookies.php

 <?php
header("content-type:text/html;charset=utf-8");
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
echo "<br/>";
$name=$_COOKIE['name'];
if(!empty($name))
{
echo "name={$name}";
}
else
{
echo "cookie已经失效!";
}
?>

二、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:程序入口

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

DelCart.php:清空购物车

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

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

 <?php
//初始化session
$bookid=$_GET['bookid'];
$bookname=$_GET['bookname'];
//echo "$bookid:$bookname<br/>";
session_start();
$_SESSION["{$bookid}"]=$bookname;
echo "购买成功!<br/><br/>";
echo "<a href='MyHall.php'>返回继续购买</a>";
?>

ShowCart.php:查看购物车

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

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

save.php:保存数据

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

del.php:删除数据

 <?php
/*
这是专门针对删除session的操作
*/
//引入文件
require_once 'Dog.class.php';
//session初始化
session_start();
echo "当前session文件的ID号是:".session_id()."<br/>";
//删除方法1:只删除一个元素
//举例:只是删除姓名:name
unset($_SESSION['name']);
echo "删除姓名之后的结果是:<br/>";
show();
//全部删除
session_destroy();
echo "<br/><br/>删除所有session数据之后:<br/>";
show(); function show()
{
echo "当前session文件的ID号是:".session_id()."<br/>";
echo "<pre>";
print_r($_SESSION);
echo "</pre>"; echo "<br/><br/>";
echo "显示姓名:".$_SESSION['name']."<br/>";
echo "显示年龄:".$_SESSION['age']."<br/>";
echo "显示判断:".$_SESSION['isboy']."<br/>";
echo "显示薪水:".$_SESSION['salary']."<br/>";
echo "显示数组:<br/>";
$array=$_SESSION['array'];
foreach($array as $key=>$val)
{
echo $key."=>".$val."<br/>";
}
echo "<br/>"; echo "显示对象:<br/>";
$dog=$_SESSION['dog'];
echo "小狗的名字是:".$dog->getName()."<br/>";
}
?>

Dog.class.php:类文件

 <?php
class Dog
{
private $name;
private $age;
private $sex;
public function __construct($name,$age,$sex)
{
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
public function getName()
{
return $this->name;
}
}
?>

modify.php:修改数据

 <?php
//引入文件
require_once 'Dog.class.php';
//初始化session
session_start();
echo "当前session文件的ID号是:".session_id()."<br/>";
//现在将姓名改为郑纪佳,并显示。
$_SESSION['name']="李四";
echo "将姓名改为李四之后的结果是:<br/>";
show(); function show()
{
echo "<pre>";
print_r($_SESSION);
echo "</pre>"; echo "<br/><br/>";
echo "显示姓名:".$_SESSION['name']."<br/>";
echo "显示年龄:".$_SESSION['age']."<br/>";
echo "显示判断:".$_SESSION['isboy']."<br/>";
echo "显示薪水:".$_SESSION['salary']."<br/>";
echo "显示数组:<br/>";
$array=$_SESSION['array'];
foreach($array as $key=>$val)
{
echo $key."=>".$val."<br/>";
}
echo "<br/>"; echo "显示对象:<br/>";
$dog=$_SESSION['dog'];
echo "小狗的名字是:".$dog->getName()."<br/>";
}
?>

show.php:显示数据

 <?php
require_once 'Dog.class.php';//这句话不能省略,非常重要,因为如果没有这句话,就不能显示对象内容
//加载session
session_start();
//显示当前会话的内容。
function show()
{
echo "当前session文件的ID号是:".session_id()."<br/>";
echo "<pre>";
print_r($_SESSION);
echo "</pre>"; echo "<br/><br/>";
echo "显示姓名:".$_SESSION['name']."<br/>";
echo "显示年龄:".$_SESSION['age']."<br/>";
echo "显示判断:".$_SESSION['isboy']."<br/>";
echo "显示薪水:".$_SESSION['salary']."<br/>";
echo "显示数组:<br/>";
$array=$_SESSION['array'];
foreach($array as $key=>$val)
{
echo $key."=>".$val."<br/>";
}
echo "<br/>"; echo "显示对象:<br/>";
$dog=$_SESSION['dog'];
echo "小狗的名字是:".$dog->getName()."<br/>";
}
show();
?>

三、比较Cookie和session

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

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

    介绍 本文章发布于博客园:https://www.cnblogs.com/fallstar/p/11310749.html 作者:fallstar 本文章适用于:ASP.NET Core 2.1 + ...

  2. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

    什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...

  3. 【转载】Cookie/Session机制详解

    [本文转自]http://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话. ...

  4. 【python爬虫】cookie & session

    一.什么是cookie? cookie是指网站为了鉴别用户身份,进行会话跟踪而存储在客户端本地的数据. 二.什么是session? 本来的含义是指有始有终的一些列动作,而在web中,session对象 ...

  5. 【cookie的使用】&【Session】

    明确一点:        cookie由服务器创建Cookie cookie=new Cookie("haha","xixi") 通过HtttpServletR ...

  6. session学习总结【session原理、应用、与cookie区别】

    session原理 session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中. 由于http是无状态协议,当服务器存储了多个用户的session数据时,如何 ...

  7. 【转】Cookie/Session机制详解

    Cookie/Session机制详解   会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...

  8. 【JavaWeb】Cookie&Session

    Cookie&Session Cookie 什么是 Cookie Cookie 即饼干的意思 Cookie 是服务器通知客户端保存键值对的一种技术 客户端有了 Cookie 后,每次请求都发送 ...

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

    分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat ...

随机推荐

  1. div 加滚动条

    div 加滚动条的方法: <div style="position:absolute; height:400px; overflow:auto"></div> ...

  2. COGS 2387.[HZOI 2016]2387题解

    题目大意: 给定一个有n个元素的数组,有m个操作,分为两种,分别是询问第k个x的下标和把下标为x的数修改为k. 题目设置了强制在线,故无法预先得知所有操作数. 思路: 有三种思路. 第一种:平衡树 b ...

  3. 9.1---上楼梯(CC150)

    注意:错误主要在溢出问题上.所以不设置int,而是long. public static int countWays(int n){ if(n == 1) return 1; if(n == 2) r ...

  4. Navicat for MySQL的使用

    一. 在Navicat for MySQL软件中,如何打开MySQL命令行界面: 图 (1) 如何调出MySQL命令行界面 如图(1)所示,在左侧空白处,右键单击即可调出“命令列介面” 注意,输入My ...

  5. ubuntu14.04 server 安装vmware worktation 12

    0) Do the basic system installation of Ubuntu 14.04 LTS (Server or Desktop) 1) wget the installer wg ...

  6. Arp攻击实战

    hyddd原创,转载请说明出处. 现在网上很多关于ARP攻击的文章,但多数是描述其原理,少数会以某个工具作为例子展开说明,但感觉说的还是不够详细,今天写个文章以实战介绍一个叫"WinArpA ...

  7. Unity3d 解析文本执行已注册的自定函数

    最近有个需求是想让程序解析策划编辑一个文本生成一段CG,内容使用大致是这样 cgSetCameraEx(118.6324,30.71189,75.55666,45,-45,0,0) cgCloneMy ...

  8. Unity3d 怪物死亡燃烧掉效果

    效果 BurnToFadeOut.shader代码 Shader "BurnToFadeOut" { Properties { _StartColor ("Start C ...

  9. MongoDB 分片管理(不定时更新)

    背景: 通过上一篇的 MongoDB 分片的原理.搭建.应用 大致了解了MongoDB分片的安装和一些基本的使用情况,现在来说明下如何管理和优化MongoDB分片的使用. 知识点: 1) 分片的配置和 ...

  10. Spring@Autowired注解与自动装配

    1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...