环境:

    
 
    有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. 图片效果集合(js、jquery或html5)

    1.jQuery HTML5 幻灯片使用支持HTML5的浏览器会有特殊效果,即切换图片时颜色的改变文章:http://keleyi.com/a/bjac/b8i3xdui.htm效果:http://k ...

  2. 深入浅出node(3) 异步I/O

    这篇主要整理深入浅出Node.js第三章 异步I/O 一) 异步I/O的原因 二)异步I/O实现现状 2.1 异步I/O与非阻塞I/O 2.2 轮询 2.3 理想的非阻塞异步I/O 2.4 现实的异步 ...

  3. 第一个随笔,调试中,用的CSS3

    希望能在博客园很好的学习并得到技术上的提升!

  4. PowerDesigner 逆向工程 Mariadb 失败

    作者环境是win8.1 64位置 PowerDesigner 15, Mariadb 10+,在逆向的过程中发生错误,导致只能逆向出表对象,但是表对象中的字段信息确实没有的. 错误信息中的一部分是:  ...

  5. js的闭包概念

    一.变量的作用域要懂得闭包,起首必须懂得Javascript特别的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript说话的特别之处,就在于函数内部可以直接读取全局变量. J ...

  6. 你的USB设备还安全吗?USB的安全性已从根本上被打破!

    前言: USB设备使用方便,但也可能被用来携带恶意软件.病毒,感染计算机系统.通过禁用自动播放功能.杀毒软件查杀.不定期的对设备进行格式化等操作可以确保它是干净的.但它存在的安全问题要比我们想象的更深 ...

  7. 搭建基于 STM32 和 rt-thread 的开发平台

    我们需要平台 如果说,SharePoint 的价值之一在于提供了几乎开箱即用的 innovation 环境,那么,智能设备的开发平台也一样.不必每次都从头开始,所以需要固定的工作室和开发平台作为创新的 ...

  8. 2016第16本:TED演讲的秘密

    花0.01元抢购了<得到APP>中的<成甲说书:TED演讲的秘密>,不到30分钟的音频,感觉全是干货,基本不用看原书了.如果在以后的演讲中随便应用几条都可以让演讲水平提升一大截 ...

  9. Android动画例子。

    例子一: 补间动画效果,从右进,从左出. ImageSwitcher mImageSwitcher = new ImageSwitcher(this); mImageSwitcher.setFacto ...

  10. iOS应用中的相关正则及验证

    1.手机号码的验证正则 正则表达式: ^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$ 详细解释 解释: ^...$: ^:开始 $:结束 中间为要处理的字串 ...