zoukankan      html  css  js  c++  java
  • 客户端禁用cookie后session的解决方法

    如果禁用cookie理论上来讲, 会影响session: session基于cookie实现, session的SESSID利用cookie保存.

    但是如果禁用了cookie之后, session就不能用了. 如果有用户恶意(选择)禁用cookie: 可以理解为用户不愿意使用我们的网站.

    如果非要实现: 可以通过a链接实现

    一、手动a链接: 用户自己给a链接的href

    session_name(): 获取或者设置session名字(没有参数就是获取,有参数就是设置)
    session_id(): 获取或者设置sessionID(没有就是获取,有就是设置)

    1. 在保存session数据界面, 获取session信息(name和id), 嵌入到URL中.

    // 保存session数据
    
    // 开启session
    session_start();
    
    // 获取session信息
    $name = session_name();
    $id = session_id();
    
    // 保存session数据
    $_SESSION['name'] = 'jason';
    
    // 给出一个链接
    echo "<a href='session.php?{$name}={$id}'>点我</a>";

    2. 在需要共享session数据的界面: 先获取session信息, 然后再获取session数据

    // 获取session数据
    
    // 改变session_start从cookie获取id的机制
    // 接受数据
    $id = $_GET[session_name()];
    
    // 修改session_start的开启机制: 使用当前制定SESSID
    session_id($id); // 注册sessionid
    
    // 开启session
    session_start(); // 不再从cookie获取,也不会自动创建新的
    
    // 获取
    print_r($_SESSION); // Array ( [name] => jason )

    浏览器输出效果:

    二、自动a链接: 通过修改session默认的机制(PHP配置文件php.ini)

    1. 修改session默认的只允许使用cookie的原则

    session.use_only_cookies = 1 改为 session.use_only_cookies = 0

    2. 开启URL转换sessionid信息的配置

    session.use_trans_sid = 0 改为 session.use_trans_sid = 1

    以上修改完了之后: 系统会自动在a标签中加入sessionid信息, 而且还能在获取session数据界面自动的从a标签去获取sessionid信息

    效果1: 所有的a标签都会自动加上session信息

    // 保存session数据
    
    // 开启session
    session_start();
    
    // 保存session数据
    $_SESSION['name'] = 'jason';
    
    // 给出一个链接
    echo "<a href='session.php'>点我</a>";

    效果2: session使用的时候,会自动的从a标签读取session信息

    // 获取session数据
    
    // 开启session
    session_start(); // 不再从cookie获取,也不会自动创建新的
    
    // 获取
    print_r($_SESSION); // Array ( [name] => jason )

  • 相关阅读:
    C# 使用 Microsoft.Feeds 组件获取 RSS 全文
    使用 Jquery 做类似搜索引擎效果
    ASP.NET MVC 利用 IHttpModule 实现路由调试
    Python 爬虫类库 Selenium 的常用方法介绍
    C# 中 New 关键词的几种用法
    ASP.NET 使用 IIS URL Rewrite 模块实现伪静态
    Java 源码分析之 HashTable
    Java 类中代码块和构造方法的执行顺序
    C# 中使用 FFmpeg.NET
    C# 项目中使用 ServiceStack.Redis 操作 Redis
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522548.html
Copyright © 2011-2022 走看看