zoukankan      html  css  js  c++  java
  • 【辅导】Task13 使用会话管理 主要知识点(1)

    会话是学习动态网站设计的重点内容。只有掌握了会话管理,才能说明你学会了动态网站设计;只有掌握了数据库管理,才能说明你学会了信息系统的设计与开发。

    这个任务我们分成两阶段来学习,第一阶段熟悉什么是Cookie和Session,第二阶段掌握使用Session和Cookie来设计网站登录,实现功能界面是授权用户才能访问。

    1、http协议是无状态的协议

    无状态含义:

    无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的是相互隔离的,请求本身包含了相应端为相应这一请求所需的全部信息。

    1、协议对于事务处理没有记忆能力

    2、对同一个url请求没有上下文关系

    3、每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况;

    4、服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器。

    实际中的使用情况:

    在web应用中,我们使用http协议,但是我们需要的web是有状态的,因此加入了cookie、session等机制实现有状态的的web。

      web=http协议+状态机制+其他机制

    为什么不改进http协议使之有状态?

    最初的http协议只是用来浏览静态文件的,无状态协议已经足够,这样实现的负担也很轻(相对来说,实现有状态的代价是很高的,要维护状态,根据状态来操作。)。随着web的发展,它需要变得有状态,但是不是就要修改http协议使之有状态呢?是不需要的。因为我们经常长时间逗留在某一个网页,然后才进入到另一个网页,如果在这两个页面之间维持状态,代价是很高的。其次,历史让http无状态,但是现在对http提出了新的要求,按照软件领域的通常做法是,保留历史经验,在http协议上再加上一层实现我们的目的(“再加上一层,你可以做任何事”)。所以引入了其他机制来实现这种有状态的连接。

    哪些方法可以实现有状态连接?

    cookies, session, application

    【无状态】

    有人将web应用中有无状态的情况,比着顾客逛商店的情景。

    顾客:浏览器访问方;

    商店:web服务器;

    一次购买:一次http访问(就是相当于一次会话)

    我们知道,上一次顾客购买,并不代表顾客下一个小时一定会买(当然也不能代表不会)。也就是说同一个顾客的不同购买之间的关系是不定的。所以说实在的,这种情况下,让商店保存所有的顾客购买的信息,等到下一次购买可以知道这个顾客以前购买的内容代价非常大的。所以商店为了避免这个代价,索性就认为每次的购买都是一次独立的新的购买。浅台词:商店不区分对待老顾客和新过客。这就是无状态的。

    但商店为了提高效益,搞促销,想鼓励顾客多购买,发展会员,会员有折扣,怎么办呢?

    【Cookie】

    给顾客发一张购物卡(磁条卡或IC卡,里面存储客户消费信息),凭会员卡购物有优惠(充1000送200)。这就是Cookie

    【Session】

    给顾客发一张会员卡(甚至是虚拟卡,只要记住会员号就可以了,比如手机号),用户消费信息记录在商店的服务器中。这就是Session。还可以实现积分兑换等高级功能。

    【Application】

    疫情期间商店为拉动消费,自主决定,所有人只要来,全场88折。这是Application。(PHP没有Application)

    其实,这些机制都是在无状态的传统购买过程中加入了一点东西,使整个过程变得有状态。Web应用就是这样的。

    (参考CSDN博主zhangvalue《http协议是无状态协议》)

    2、什么是Cookie

    Cookie就是你访问网站的时候,网站在你的计算机上留下了个小文件(类似于上面的购物卡。它可不问你要不要留,只要你的浏览器同意存储Cookie它都会留下来。你要不同意,大多数网站你都登录不了,因为登录要使用Session,而Session要借助临时Cookie才能实现)。不同浏览器的存储方式不一样,查看方式也不一样。课件中介绍了谷歌浏览器的Cookie的查看方式。

    3、如何创建和删除Cookie

    在PHP中,创建Cookie使用setcookie()函数:

    setcookie($name, $value, $expire, $path, $domain);

    • $name是cookie的名字
    • $value是cookie的值,只能是文字,如果是其它类型,也会按PHP规则转换为string
    • $expire是unix时间戳,很关键,指定cookie的过期时间。以前的时间就是用删除cookie,未来的时间就可创建持久化cookie,没有指定时间就是临时cookie,只在本次会话时有效。(什么是会话?)
    • $path和$domain用来指定有效路径和域名,比较复杂,一般不用。
    • 特别注意:setcookie()函数使用时,必须在任何html输出之前,否则无效。

    语句:$_COOKIE["name"] = $value;只能创建临时cookie。

    读取Cookie使用系统变量$_COOKIE就可以了:

    echo $_COOKIE["name"];

    可以创建多值Cookie注意多值Cookie的创建与读取方法:

     

     Cookie过期以后会自动删除,要主动删除,创建Cookie时指定过期时间为过去的某个时间就可以了。

    注意:Cookie中保存的只能是字符串信息。Int等标量类型会自动进行类型转换,但数组、对象不支持自动转换。所以要另外想办法。课件中介绍了两种方法:

    • 使用序列化函数serialize()和反序列化函数unserialize()
    • 使用JSON编码函数json_encode()json_decode(),但要注意json解码时得到的是stdClass对象(即object对象),只能得到数据,丢失了方法。

    4、什么是Session?

    Session,就是会话,从你打开浏览器访问这个网站开始,只要浏览器没关,不管你在这个网站多少网页,这都是一次会话。

    什么时候会话结束呢?你关闭浏览器并不意味着Sesison马上会失效,因为服务器端是没办法侦测到你什么时间关闭浏览器。它只能侦测到你多长时间内一直没有访问请求,就认为过期了。这意味着,如果没有任何处理的话,你浏览器开着,好长一段时间没有刷新页面或者访问这网站的其它页面,它就认为Session失效了。大多数网站会要求你重新登录。

    这个失效时间是多少呢?1440秒(24分钟)

    Session是借助临时Cookie来工作的(需要向服务器传递Session_ID),因此你不能禁用浏览器的Cookie。

    使用Session前必须使用session_start()函数启用Session不管是读还是写Session。(我们读取Session时如果忘记了这一条,会读取失败)

    读写Session都是使用$_SESSION系统变量

    session_start();

    $_SESSION["name"]=$value;

    $name = $_SESSION["name"];

    读取Session前最好是使用isset函数判断下这个Session是否存在,读取Cookie也一样。

    SESSION中可以存储任意类型数据,包括对象这给我们带来很大方便。但还是建议不存储太大量的数据,比如,你存储购物车的数据是可以的,但你不能把一个班的全部成绩存储进去,一是Session数据也要通过http协议传递到下一个网页,数据量过大会拖慢浏览器,二是容易数据泄露。

    5、Cookie一般应用在什么地方?

    登录时记住用户名

    免登录(可能要存储加密后的密钥。比较危险,不建议使用,因为Cookie可能会被冒用)

    保存用户浏览历史,探知用户感兴趣的内容。(可能会被用户清除Cookie)

    6、Session一般应用在什么地方?

    用户登录

    所有网站要验证用户身份,都要用到Session。

    在网站各网页传递与用户身份有关的数据,Session是最安全高效的。

    只要是动态网站,都要用到Session。

  • 相关阅读:
    spoj227 树状数组插队序列问题
    hdu2838树状数组解逆序
    hdu2642二维树状数组单点更新
    hdu1556 树状数组区间更新单点查询板子
    hdu3015树状数组 poj1990的离散化版本
    poj1990两个树状数组
    Python中面向对象和类
    Python中面向对象和类
    Python中的字典dict
    Python中的字典dict
  • 原文地址:https://www.cnblogs.com/whitewin/p/12665259.html
Copyright © 2011-2022 走看看