登录界面,用户提交后,后台获取到用户名密码,然后会设置cookie,以便于前端使用,今天在修改项目记住密码的功能的时候,读取cookie,如果存在loginInfo字段说明用户在上一次点击了记住密码的功能,那么就会解析loginInfo的值来动态填充input输入框,写程序几行代码搞定了,但是测试的时候发现有一个账户在读取cookie的时候总会对一个双引号" ",找了半天也没找到原因,而线上已发布的版本却没有这个问题,找了好久才发现在这个出问题的账户密码出现了!@#这三个特殊符号:

  document.cookie=> "loginInfo="admin123/admin!@#" " 这种解析的cookie  ,等于号后边会先用一个字符串包裹,不含上面!@#的账户解析出来是这样的:

     document.cookie=> "loginInfo=ceshi01/ceshi000000" , 可以发现正常显示应该是这样key=value,而不是key=“value”;

  后来阅读资料发现:

  cookie是分两个版本一个是version 0,这个版本是被所有浏览器所接受的,另一个是version 1,关键区别是version 1的cookie内容可以放些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。

       version 0不行.

       tomcat6.0.16的cookie内容不能用双引号包含,tomcat6.0.18存放cookie内容可以用双引号包含,这样的好处就是避 免了取含有特殊字符的值时,取出来的值是不完整的,cookie内容带有=符号时,就是发生取值不完整的情况!

       这也就说明为何!@#的账号会出现双引号,线上版本正常,本地的环境下就会出现错误,因为线上的tomcat和本地的不一样,线上是不会携带""。

解决办法:

后台设置cookie的时候encode,对账号密码进行编码,可以将 !@#这些字符转换成编码形式%21 %40 %23,前端读取的时候在解码将%21%40%23解析为!@#。

  前端解码decodeURI,decodeURIComponent ,但是使用中decodeURI()无法解析@#这两个符号,因为:encodeURI() 函数是不会对这几个符号转义的:;/?:@&=+$,#;

所以用decodeURIComponent就解决了双引号的问题。

前端解析cookie出现多余的双引号的问题的更多相关文章

  1. Java 处理json字符串value中多余的双引号

    转: Java 处理json字符串value中多余的双引号 一.错误场景 json字符串的value值中有多余的双引号 1.直接上错误的json字符串 1 String errorJsonStr =  ...

  2. C# json解析字符串总是多出双引号

    json好久没用了,今天在用到json的时候,发现对字符串做解析的时候总是多出双引号. 代码如下: string jsonText = "{'name':'test','phone':'18 ...

  3. 【sqli-labs】 less22 Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入)

    注入的过程和less 20 21一样,这次闭合cookie的使用的双引号

  4. 单双引号的区别,defined容易疏忽的小地方

    单双引号的区别(面试题)                    1.双引号可以解析变量,单引号不行                    2.双引号解析转义字符,单引号不解析转义字符.但是单引号能解析 ...

  5. PHP中使用单双引号的区别

    1,双引号可以解析变量,单引号不可以解析: 2,双引号解析转义字符,单引号不解析转义,但是可以解析 \'  和  \\ ; 3,单双引号不能自己套自己,要嵌套使用,避免混乱: 4,单引号效率更高,能使 ...

  6. PHP中单引号与双引号的区别

    在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ". 一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析. PHP允许我们在双引号串中直接包含 ...

  7. Mybatis 条件判断单双引号解析问题

    最近使用 Mybatis 遇到了一个奇怪的问题,前端传了一个数字字符串(type = "1") ,我做了如下判断: <if test=" type == '1' & ...

  8. 关于PHP单双引号解析变量的问题

    双引号可以解析变量,单引号不行 $qweqwe = 123; echo "$qweqwe"; 输出123 echo '$qweqqwe'; 输出$qweqwe

  9. SQL注入之Sqli-labs系列第二十一关(基于复杂性的cookie POST报错注入)和二十二关(基于双引号的cookie POST报错注入)

    开始挑战第二十一关(Cookie Injection- Error Based- complex - string) 和二十二关(Cookie Injection- Error Based- Doub ...

随机推荐

  1. git 的 pull、fetch、merge

    1.pull = fetch + merge In the simplest terms, git pull does a git fetch followed by a git merge. You ...

  2. Visual Studio 起始页面关闭新闻等

    [工具]->[选项]->[环境]->[启动] 将“下载内容的时间间隔”一项的勾选去掉,然后确定保存.这样,就大功告成啦

  3. Docker给运行中的容器添加映射端口

    方法一: 1.获得容器IP将container_name 换成实际环境中的容器名docker inspect `container_name` | grep IPAddress 2. iptables ...

  4. TensorFlow学习笔记(四)图像识别与卷积神经网络

    一.卷积神经网络简介 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. ...

  5. 002-启动spring boot应用

    一.idea启动. 1.在src目录里面找到启动类(包含主函数的类)DemoApplication,然后在该类里面右键,选择run DemoApplication.main,即spring boot应 ...

  6. 解决日志unicode编码问题

    Xcode打印日志里如果有汉字,有时会以Unicode编码形式展示,另需工具转码,降低了开发的效率,未解决这一问题,简便的解决方法是 pod 'HYBUnicodeReadable' 这个第三方库很好 ...

  7. TOSCA自动化测试工具--new Project

    1.在默认页面点击Project 进入new project页面 2.第一步出来的页面上点击new 3. 第2步弹出的页面上选择路径,project 名 3.OK之后就创建好了

  8. C++之旅:拷贝构造与友元

    拷贝构造与友元 拷贝构造是在构造一个对象的时候将已有对象的属性拷贝给新的对象:友元可以让一个类的所有属性(主要是private)对特定的类开放 拷贝构造 如果没有复写拷贝构造函数,系统会帮我们默认生成 ...

  9. head中的title显示在body中

    今天遇到一个问题,就是title中的内容会显示在body中 <head> <title>324234</title> </head> 网上搜了一下是说编 ...

  10. Minor GC和Full GC区别(转)

    http://blog.csdn.net/u010796790/article/details/52213708   概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Ja ...