zoukankan      html  css  js  c++  java
  • COOKIE与SESSION的详解

     

    cookie与session的小例子:

    包含cookie记住登录名,session防止用户非法登录2个例子:

    问我拿吧,这个下载连接挂了

    描述

    cookie过程描述

    网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
    用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来. 
    用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢

     

    session过程描述 :

    当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中。
    浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.

    COOKIE与SESSION区别:

    一. COOKIE

    下面是cookie在浏览器和服务器中请求与响应的过程:

    1.    COOKIE的工作原理

    cookie过程描述

    网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

    用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来.

    用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢

    set_cookie.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h1>设置COOKIE</h1>
        <?php 
            //设置cookie
            //Setcookie(名称,值,过期时间,有效路径,有效域名)
            setcookie('name','admin94324239',time()+2222,'/','.abc.com'); 
         ?>
    </body>
    </html>

    get_cookie.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h1>获取COOKIE</h1>
        <?php 
            echo $_COOKIE['name'];
         ?>
    </body>
    </html>

    2.    设置COOKIE

             创建语法:

           

    setcookie(名称,值,过期时间,有效路径,有效域名)

             说明:

    1)        名称, 字符串,  为取出cookie的值服务.

    2)        值, 注意值的类型.(必须为string类型) 

    3)        过期时间, time()+秒数

    设置cookie的有效期为一周:

    注意!

    4)        有效路径, 指的是在哪个路径下可以将cookie的值取出

             默认情况下,是当前页面所在的目录及其子目录有效的.

    5)        有效域名, 指的是在哪个域名下可以将cookie的值取出

             说明: 默认情况下是当前的主域名. 如www.abc.com

     

    3.    读取COOKIE

       直接通过超全局数组下标读取

       

    echo $_COOKIE[‘cookie的名称’]

    4.    删除COOKIE的方法

    1)              将cookie的有效时间过期即可.

    setcookie(名,值,time()-1)
    
    setcookie(名,值,time()-9999999);
    
    setcookie(名)

    5.    实例:自动记录登录的用户名

    前台页面:

    后台处理页面:

     

     

    二.SESSION

    1.    SESSION的工作原理

    下面是在浏览器详细的工作过程:

    session过程描述 :

    当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中

    浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.

    从下面可以看出session与cookie息息相关:

    设置session:

    获取session:

    以上代码:

    set_session.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>设置session</h1>
    <?php 
    //开启session
    session_start();
    //创建session
    $_SESSION['username'] = 'itcast_china';
    
    
     ?>
    </body>
    </html>

    get_session.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>获取session</h1>
    <?php 
    //开启session
    session_start();
    //获取session
    echo $_SESSION['username'];
     ?>
    </body>
    </html>

    2.    开启SESSION会话功能

    (1)在创建session之前必须先开启会话

    (2)方法: session_start();

    (3)位置: 原则开启之前只要不超过4KB都可以开启. 建议,在当前页面的最前面开启.

    (4)在一个页面中,只能开启一次.

    (5)Session_start(); //在开启时会判断,当前会话是否已经开启,如果已经开启则不会再生成一个id号.

    (6)不管是创建session,还是使用(判断,删除等)session都必须先开启.

    3.    获取当前的SESSION的ID值

    1 echo session_id(); 

    4.    添加SESSION数据

            

    (1)$_SESSION['名称'] = 值

    session的值可以是多类型的:

    5.    读取SESSION数据

      数组通过下标(session名称)获取值.

    1 <?php 
    2 //开启session
    3 session_start();
    4 //获取session
    5 echo $_SESSION['username'];
    6  ?>

    6.    删除SESSION数据

    (1)unset  //销毁变量

    1 unset($_SESSION[名])

    (2)session_destroy();  //删除当前的session文件

     

      彻底删除session,  两个函数接合使用.

    7.    实例:防止用户非法登录

    看小例子

    8.问题:

    如果用户将浏览器的cookie禁用,问session还能使用吗?为什么?如何解决?

    答:不能使用. 因为session是基于cookie的.

    解决方法:

    自己来传session_id即SID:

    test.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>禁止cookie怎么办?</h1>
    <?php 
    session_start();
    $_SESSION['username'] = 'abc';
     ?>
     <a href="test.php?<?php echo SID; ?>">自己来传!</a>
    </body>
    </html>

    index.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>获取SID并设置为当前的session_id</h1>
    <?php 
    //从地址栏中得到session_id,并设置为当前的session_id;
    if(isset($_GET['PHPSESSID'])){
        //设置为当前的session_id
        session_id($_GET['PHPSESSID']);
    }
    session_start();
    echo $_SESSION['username'];
    
     ?>
    </body>
    </html>

    9.    SESSION的垃圾回收:

    什么是SESSION的垃圾回收?

    SESSION垃圾回收时间(session.gc_maxlifetime),

    回收的概率(session.gc_probability, session.gc_divisor)

    在php.ini中:

    三.SESSION相关配置

    session.name = PHPSESSID
    session.auto_start =0 // 0 表示不开启.
    session.cookie_lifetime=0   //代表浏览器关闭,会话结束
    session.cookie_path=/     //指定了要session会话 cookie 的有效路径
    session.cookie_domain    //指定了要session会话 cookie 的有效域名
    脚本设置:
        (a)ini_set('session.cookie_path', '/');
        (b)ini_set('session.cookie_domain', '.mydomain.com');
        (c)ini_set('session.cookie_lifetime','1800');"

     例子:设置10内有效的session

    //set_session.php  设置10秒内有效的session
    <?php
    session_start();
    ini_set('session.cookie_lifetiem','10');
    session_start();
    $_SESSION['username'] = 'abc';
    ?>
    
    
    //get_session   获取10秒内有效的session
    <?php
    session_start();
    echo $_SESSION['username'];
    
    ?>

             

  • 相关阅读:
    人不成熟的六个特征
    qq申请器,有源码,用post提交
    有的公司,在不断创新,我们时刻能感受到
    Java中 堆 栈,常量池等概念解析(转载)
    Jquery获得相同id的元素
    强大Jquery插件,table排序
    和计算机沟通
    千万级架构设计诀窍(zz)(
    强大Jquery插件,table排序之二
    原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳 森在文中所言,本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级
  • 原文地址:https://www.cnblogs.com/mrszhou/p/7507694.html
Copyright © 2011-2022 走看看