环境:

    
 
    有2个业务接口需要转发到82的服务器上:
    ../user/getCode.do
    ../user/doLogin.do
现象:
    
    使用上述的2个接口实现用户登录功能,首先显示登录页面,调用../user/getCode.do获取验证码,然后用户界面输入用户名、密码和验证码,点击登录之后调用../user/doLogin.do接口实现登录。结果../user/doLogin.do后端总是找不到验证码,因为浏览器没有把cookie中的JSESSIONID传递过来。无法登录的话,后续的所有其他接口都无法调用了。

分析:
    通过chrome的network,可以看到如下信息:
    那么现在的问题就是为什么在点击立即登录之后,浏览器为什么没有在请求中带上上次返回的cookie信息呢?
    仔细看response header中的set-cookie头可以发现,其中有一个Path=/webserver/,说明这个cookie是有适用范围的。只能在/webserver/路径下使用
    
    而我们代码中使用的路径是这么写的:     ../user/getCode.do,没有包含webserver信息,这样浏览器自然就认为这个请求和上次返回的那个cookie不匹配。

解决方法:
    解决方法有2中:
    一种是在请求的时候带上/webserver/前缀,比如把上文的 ../user/getCode.do改为  ../webserver/user/getCode.do;
    第二种是修改代理的实现,把82服务器上返回的http头上的set-cookie内的Path改为  Path=/,代码如下。
    在vue的webpack脚手架中的build/dev-server.js内的  Object.keys(proxyTable).forEach(function (context)  的实现改为如下形式

  1. Object.keys(proxyTable).forEach(function (context) {
  2. var options = proxyTable[context]
  3. if (typeof options === 'string') {
  4. options = {
  5. target: options,
  6. onProxyRes(proxyRes, req, res) {
  7. //set-cookie:JSESSIONID=6F766ED2EEEBEAA9245F7F908A848857; Path=/webserver/; HttpOnly
  8. var oldCookie = proxyRes.headers['set-cookie']
  9. if(oldCookie== null || oldCookie.length==0){
  10. delete proxyRes.headers['set-cookie']
  11. return
  12. }
  13. console.log(oldCookie)
  14. var oldCookieItems = oldCookie[0].split(';')
  15. var newCookie = ''
  16. for(var i=0; i < oldCookieItems.length; ++i){
  17. if(newCookie.length >0)
  18. newCookie += ';'
  19. if(oldCookieItems[i].indexOf('Path=') >= 0)
  20. newCookie += 'Path=/'
  21. else
  22. newCookie += oldCookieItems[i]
  23. }
  24. proxyRes.headers['set-cookie'] = [newCookie]
  25. //proxyRes.headers['x-addedygc'] = 'foobar'; // add new header to response
  26. //delete proxyRes.headers['connection']; // remove header from response
  27. }
  28. }
  29. }
  30. app.use(proxyMiddleware(context, options))
  31. })

    
结论:
    经过试验,以上2种方法都适用,问题解决。
    
 
 
 

在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?的更多相关文章

  1. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

    基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...

  2. 【技术博客】基于vue的前端快速开发(工具篇)

    一.Vue教程 vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组 ...

  3. 基于Vue的WebApp项目开发(二)

    利用webpack解析和打包.vue组件页面 相关知识: vue项目中的每个页面其实都是一个.vue的文件,这种文件,Vue称之为组件页面,必须借助于webpack的vue-loader才能运行,所以 ...

  4. 基于Vue的WebApp项目开发(六)

    实现商品购买列表页面 步骤一:新建goodslist.vue文件 <template> <div id="tml"> <!--利用mui中的图文表格组 ...

  5. 基于Vue的WebApp项目开发(四)

    实现新闻咨询页面 目录结构 步骤一:创建newslist.vue文件 <template> <div id="tml"> <!--使用mui框架,实现 ...

  6. 基于Vue 和 webpack的项目实现

    Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...

  7. 基于Vue的WebApp项目开发(三)

    实现根组件通用的头部和底部样式 明白由webpack搭建起来的Vue项目的执行流程,那么就可以知道实现这个需要只要在根组件和入口文件上做“手脚”即可 <!--以后项目的根组件--> < ...

  8. 基于Vue的WebApp项目开发(一)

    了解webpack的魔力: 项目结构以及开发环境 webpack初体验之打包文件 1.首先创建三个文件,分别是index.html.main.js和calc.js index.html <!DO ...

  9. 基于vue的新组件开发

    前天完成了一个新组件的开发,做的过程也是各种遇到问题,彻底弄懂了slot,巩固了一些flex布局和jquery的知识,比起自己第一次做组件开发,现在已经是能够下手做,遇到问题解决问题,还算有进步. 但 ...

随机推荐

  1. OData V4 系列 查询操作

    OData 学习目录 对OData的操作,主要是查询,下面把相关的查询情况列出来,供参考学习,每个操作都有对应的截图,便于理解 默认查询 $expand  查询导航属性关系 ,查询Product相关的 ...

  2. Eclipse如何发布web项目

    目录结构: // contents structure [-] 需要的环境 下载和配置JDK 下载和配置Tomcat 下载Eclipse Eclipse 4.4.0 发布Web步骤 创建server ...

  3. JS高程3.基本概念(2)

    1.ECMAScript数据类型 5种简单数据类型,分别是: Undefined Null Boolean Number String 1种复杂数据类型: Object (1)typeof操作符--检 ...

  4. SAP中需要记住的一些标准表

    E070 请求号的抬头表 E071 请求号的行项目表 E07T 请求号的文本 E71K TASK的抬头(子请求) ******************************************* ...

  5. 显示快照监控:/SDF/MON

    透过SE38运行程序/SDF/MON,可以显示屏幕的监控快照:

  6. shiro 实现单用户登录,一个用户同一时刻只能在一个地方登录

    我这里 shiro 并没有集成 springMVC,直接使用 ini 配置文件. shiro.ini [main] # Objects and their properties are defined ...

  7. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q139-Q141)

    Question 139You create a SharePoint solution that contains two Features named Feature1 and Feature2. ...

  8. Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法

    ➠更多技术干货请戳:听云博客 如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装 ...

  9. 通过jconsole监控tomcat JVM 内存、线程、CPU

    从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击  ...

  10. 基于Ruby的watir-webdriver自动化测试方案与实施(三)

    接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ...   编写脚本 ...