环境:

    
 
    有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. Code First :使用Entity. Framework编程(8) ----转发 收藏

    第8章 Code First将走向哪里? So far, this book has covered all of the Code First components that reached the ...

  2. 使用CSS3制作立体效果的导航菜单

    效果如下: 也可以点击网址查看效果:http://keleyi.com/keleyi/phtml/html5/12.htm 请使用支持CSS3的浏览器访问本页面,获得更好效果. 源代码: <st ...

  3. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  4. 标准BST二叉搜索树写法

    本人最近被各种数据结构的实验折磨的不要不要的,特别是代码部分,对数据结构有严格的要求,比如写个BST要分成两个类,一个节点类,要给树类,关键是所以操作都要用函数完成,也就是在树类中不能直接操作节点,需 ...

  5. Android Home键监听

    Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...

  6. iOS 学习 - 23 加载本地 txt 文件, NSMutableParagraphStyle 段落格式,缩放动画,字体间距

    思路: 1.new 一个 Empty 后缀为 .txt 文件,内容随笔拷贝一段 2.用 NSString 接收本地文件,再用一个标题拼接字符串 3.创建一个 NSMutableParagraphSty ...

  7. Eclipse部署项目的原理简介eclipse,wtpwebapps,tomcat

    转载请注明出处! http://www.cnblogs.com/libingbin/ 感谢您的阅读.如果文章对您有用,那么请轻轻点个赞,以资鼓励.

  8. 如何在 ASP.NET 4.6 与 IIS10 中运用 HTTP/2 ?

    在过去十年中,Web 技术已经取得了种种进展.从基本的 HTML 开始,网页发展出更丰富的外观和感觉,变得更加直观,对用户更加友好并且越来越大放异彩.这些变化的关键贡献来自于一些新的和翻新技术,且借力 ...

  9. rails中的form_for

    1 form_for方法是ActionView::Helpers::FormHelper模块内的方法,所以可以在ActionView的实例中直接调用 2 from_for方法的原型为form_for( ...

  10. IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用

    Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...