zoukankan      html  css  js  c++  java
  • session和cookie学习笔记

    cookie保存在用户的电脑本地;

    setcookie函数若不设置有效时间,则并在关闭浏览器后就失效。

    浏览器链接一个URL时,首先搜索当地保存的cookie,如有相关的(根据域名判断),则将它一起提交到服务器。

    cookie 中的值设置后只能在下一页生效,而且必须在发送出其它header之前就发出,session_start函数也一样。

    同样cookie 中的值删除后,当前页中cookie仍然有效,下一页才会失效。

    session中的变量设置或删除后立刻生效。

    session不一定必须依赖cookie,这也是session相比cookie的高明之处。



    采用COOKIE技术的SESSION实现

    在客户端:SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE(cookie名为PHPSESSID);在服务器端保存其他session变量(通过文件或数据库),比如session_name等等。当用户请求服务器时也把session_id一起发送到服务器,通过session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。

    session_id在浏览器关闭时就会失效,因此在客户端的名为PHPSESSID的cookie(一般是这个名字,可以在php.ini中的session.name设置)也会随之删除。

    在服务器端:session保存在服务器上的一个文件或服务器的数据库中。当脚本中没有使用session_destory()销毁session时,这个文件会一直保留在服务器端,即使session id已经失效。


    URL中传递SESSION ID的方法

    由于session也依赖于cookie,因此若客户端禁用cookie,session将失效。

    解决的方法是在url中传递session id,这在linux/unix主机中会自动实现

    需要保证php.ini中的session.use_only_cookies配置为0(为默认值),才可使用url传递。

    url传递session id的几种方法:

    1、在连接到另外的页面时,使用 url?SID 的方式通过url传递session

    2、也可设置php.ini中的session.use_trans_sid = 1,使得每一个页面中的连接在跳转时候自动附加上SID。


    通过url传递SID会带来安全上的风险,主要是附带sid的url传递给第三方后,第三方可能获取该session id对应存在服务器上的session变量。

    为此有以下变通的安全方法:

    1、通过隐藏表单传递,达到隐藏session id的目的??

    2、在服务器端保存session id(通过文本或数据库)

    如在page1中session_start()后,将session id保存到服务器的一个文件中,在跳转到page2后,首先打开该文件,从文件中取出$sid(具体名自定),然后使用session_id('$sid')将page2中的session id设置成和page1中的一样,再session_start()即可。



    *******免登录的一种解决思路*****

    首先在用户本地保存一个cookie,留下session id,和另外一个随机字符串$random,然后在服务器端根据这两者按照某种算法如md5计算一个
    数值保存在如$_session['validateNum']中。

    当用户下次访问网站时,发送session id和$random给服务器,服务器根据session id取出validateNum,验证是否符合。

    若符合,则用户登录。否则,让用户重新登录,以避免伪造cookie.
  • 相关阅读:
    c# 遍历DataTable
    c# 判断网络状态
    c# 发送Http 请求
    c# 处理Json字符串
    环境搭建(Nginx + PHP7 + Mysql + 运行ThinkPHP5项目)
    c# 获取时间戳
    php 处理 byte
    微信小程序 滚动至元素底部
    mysql 删除 多个字段相同的 重复的 数据
    微信小程序 跑马灯效果
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1550934.html
Copyright © 2011-2022 走看看