cookie和session






cookie和session


会话

会话:用户点开一个浏览器以后,点击多个超链接,可以访问某个网站的多个web资源,然后关闭浏览器,整个过程是一次会话。

会话的常见的使用的实例

1、每个用户在会话过程中不可避免的产生一些资源,服务器必须为用户保留这些数据。比如说购物车,深刻理解淘宝网上购买东西的实例的过程。每个用户查看购物车的时候看到的都是自己的选择的东西,这个功能该怎样实现?
2、优酷在你一打开的时候,提醒你上次观看的内容,提醒你上次看过的内容是否继续观看

解决的办法:

会话技术,cookie 和 session
如何保证用户记录上次登陆网站的时间

cookie是客户端的技术,服务器把每个用户的数据以cookie的形式写给用户的浏览器
cookie就是服务器在客户端保存的信息。 比如自定义首页
cookie的基本使用 以字串的形式保存在客户端,形如键值对 +保存的时间,
把雇员系统的用户名和密码保存到客户端的cookie
使用的是php5以后的版本对php版本操作cookie


<?php
//把用户和密码保存到客户端的cookie  键  值   在客户端保存多少时间(按秒计算)现在表示的在客户端保存一小时
header("content-type:text/html;charset=utf-8");
  setcookie('name','value',time()+60);    //但是这个只能是字符串类型,但是不能保存对象,而session则可以
//如何获取cookie
   foreach ($_COOKIE</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key=>$val){
       echo $key</span>.<span class="hljs-string">""</span>.<span class="hljs-variable">$val."<br>";
   }
   //让设置的cookie无效
setcookie('name','value',time()-1);
echo "<br/>************************************************<br/>";
foreach ($_COOKIE</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key=>$val){
    echo $key</span>.<span class="hljs-string">""</span>.<span class="hljs-variable">$val."<br>";
}
?>

cookie对待每个存储的键值对可以设置不同的有效时间,cookie是保存在每台电脑的客户端上,更新cookie的某个值,也是重新设置这个值。注意删除cookie的方式让过期的时间为当前的时间-1,获取的的时候就是$_COOKIE[‘name’].
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式

session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识
(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

当你登录了摸网站后每一页都可以看到自己登陆了以后的用户名
1、数据库库
2、cookie 虽然可以解决但是会带来带宽的问题(因为cookie是保存在客户端的)
3、session 访问第一个的时候使用session技术来存到服务器端
网站安全性的问题——用户无需登录,就可以范围跟我们的管理页面,并且可以对管理页面进行操作

session的初步介绍

session 是服务器端的技术,服务器端为每一个用户创建独享的session文件,由于session为用户的浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据存储在session中,当用户再去访问服务器中的其他we资源时,其他web资源再从用户各自的session中去除数据为用户服务
session的基本用法

header("content-type:text/html;charset=utf-8");
       echo " 演示如何使用session";
//1、初始化session
      session_start();
//2、保存数据
    $_SESSION['name']='zhaisaj';

session文件中可以保存所有的基本数据类型

header("content-type:text/html;charset=utf-8");
       echo " 演示如何使用session";
//1、初始化session
      session_start();
//2、保存数据
    $_SESSION['name']='zhaisaj';
   $_SESSION['age']=10;
$_SESSION['isBoy']=true;
  $arr=array("北京","香茗");
 $_SESSION</span>[<span class="hljs-string">'arr1'</span>]=<span class="hljs-variable">$arr;
   class Dog{
       private $name;
       private $age;
       function __construct($name</span>,<span class="hljs-variable">$age)
       {
           $this</span>-&gt;name=<span class="hljs-variable">$name;
           $this</span>-&gt;age=<span class="hljs-variable">$age;
       }

   }
   $dog=new Dog('haa','wqw');
    $_SESSION</span>[<span class="hljs-string">'dog1'</span>]=<span class="hljs-variable">$dog;
    echo print_r($_SESSION);

回话:已关闭浏览器为准
一个回话对应一个session文件
session的删除
关于an incomplete object的解决方法 类的定义要重新在这个文件里边重新声明 如果要是使用require_once()就必须写在 session_start();之前
更新session就是重新设置,但是也需要先 session_start(); 使用unset方法
删除整个关于 你的session session_destroy();

     echo  $xiaogou->getName();
   unset($_SESSION['name']);   //删除一个
    echo   print_r($_SESSION);
        session_destroy();   //删除和你的浏览器相关session全部删掉   不会删掉别人的

session的细节 php.ini 修改之后要重新启动apache
1、session的默认的存放时间是24min 在php.ini里边可以设置 在24分钟内没有使用session,该文件就会被视为垃圾回收
2、session存放的路径是可以修改的 session.save_path
session删除的应用之处 安全退出 当你点击安全退出的时候,程序就会手动的删除session
3、在使用session的时候,应当保证对session的初始化,方法有
1、 在需要使用的session的页面都写入session_start()
2、在php.ini 中配置session.auto_start=1(不推介)效率会降低

用户操作session的时候才创建session
程序只要看见session_start()的时候,就会创建session的文件,但是目前的session文件是一个空的,一次回话创建一个session文件,即使在遇到session_start()也不会再创建session文件,所以这样一次回话就只对应一个。
session可以做的事情:
1、网站商城的购物车 (试下多个页面共享这个信息)
2、保存用户登陆额信息、放置不合法的用户进入网站
服务器是怎样实现,一个session文件为一次回话服务的
原理图

SESSION[]=sessionstart()访_SESSION的时候,会出现无法识别$_SESSION的错误
如果用户禁用了cookie会出现什么情况?
按照常理就出现这样一个问题 在一个会话里边不能共享一个session。
当用户禁用cookie以后,在服务器每次session_start()都会创建一个全新的session文件,后果就是无法让多个页面共享这个session
这种情况下如何解决?
从session cookie http协议入手。
方案1
在页面之间跳转的时候传递一个参数 session_id
这个值是session的id值,同时在每个页面中加入

if(!empty($_GET['phpsession_id'])){
    //如果传过来这个变量,就创建这个session_id的session文件
    session_id($_GET['phpsession_id']);
}
//没有的还就创建一个新的
session_start();

如果收到了其他页面传递的session_id 就直接读取这个id对应的session文件,不再产生新的session文件
方案2
使用这个常量


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值