相关疑难解决方法(0)

带有显式域的localhost上的Cookie

我一定错过了一些关于cookie的基本知识.在本地主机上,当我设置在服务器端的cookie,明确指定域为localhost(或.localhost).某些浏览器似乎没有接受cookie.

Firefox 3.5:我在Firebug中检查了HTTP请求.我看到的是:

Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/
Run Code Online (Sandbox Code Playgroud)

或者(当我将域设置为.localhost时):

Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,都不会存储cookie.

IE8:我没有使用任何额外的工具,但cookie似乎也没有存储,因为它不会在后续请求中发回.

Opera 9.64: localhost和.localhost都工作,但是当我检查Preferences中的cookie列表时,域名设置为localhost.local,即使它列在localhost下(在列表分组中).

Safari 4: localhost和.localhost都可以工作,但它们在Preferences中始终列为.localhost.另一方面,没有显式域的cookie,它显示为localhost(无点).

localhost有什么问题?由于存在这么多的不一致,必须有一些涉及localhost的特殊规则.另外,我不完全清楚为什么域名必须以点为前缀?RFC 2109明确声明:

Domain属性的值不包含嵌入点或不以点开头.

为什么?该文件表明它必须对安全做些什么.我不得不承认我没有阅读整个规范(稍后可能会这样做),但听起来有点奇怪.基于此,在localhost上设置cookie是不可能的.

cookies setcookie

169
推荐指数
7
解决办法
19万
查看次数

跨域POST请求不发送cookie Ajax Jquery

似乎已经在stackoverflow上讨论了类似的东西,但我找不到完全相同的东西.

我正在尝试使用CORS(跨源资源共享)发送Cookie,但它无法正常工作.

这是我的代码.

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'json',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);
Run Code Online (Sandbox Code Playgroud)

我没有在请求HEADER中看到这个cookie.

javascript cookies ajax jquery cross-domain

59
推荐指数
4
解决办法
9万
查看次数

通过HTTPS的HTTP Cookie和Ajax请求

我知道之前已经以各种形式提出过这个问题,但我似乎无法解决这个问题.我已经尝试使用jQuery和本机JS API来发出Ajax请求.

我的情况如下(见附图):

  1. 浏览器发出HTTP请求
  2. 服务器响应并设置持久性Cookie
  3. 浏览器发出HTTP Ajax请求,Cookie就没问题了
  4. 服务器按预期响应,更新Cookie
  5. 浏览器发出HTTPS Ajax请求,Cookie不再存在(?!)
  6. 服务器提供"默认"响应,因为没有Cookie(意外行为)

在任何人开始关于跨域请求的讲座之前,请先说明一些事情:

  • 我知道这是一个跨域请求(不同的协议),这就是服务器Access-Control-Allow-Origin在响应中设置标头的原因(我使用的是Chrome和Firefox,两者都支持CORS)
  • 但我也知道,HTTP cookie应该可以通过HTTPS进行管理(参见此处),因为主机是相同的
  • (编辑)为一般域(例如.domain.ext)正确设置cookie,并且HttpOnly和Secure标志都没有设置

那么,为什么,为什么,为什么浏览器在进行HTTPS Ajax调用时不会传递cookie?有任何想法吗?我快要忘了......

     +-----------+ HTTP Request     +-----------+
     |Browser    |+---------------->|Server     |
     +-----------+                  +-----------+

                   HTTP Response
                  <----------------+
                   Set-cookie

                   Ajax HTTP Req.
                  +---------------->
                   Cookie (OK)

                   HTTP Response
                  <----------------+
                   Set-cookie (OK)

                   Ajax HTTPS Req.
                  +---------------->
                   No Cookie (!!!)
Run Code Online (Sandbox Code Playgroud)

cookies ajax https http

43
推荐指数
1
解决办法
3万
查看次数

为什么asp.net不会在localhost中创建cookie?

好的,这真的有点开始让我烦恼.我有一个简单的Web项目设置位于:"C:\ Projects\MyTestProject \".在我的机器上的IIS中,我已经将虚拟目录映射到此位置,因此我可以在本地运行我的站点(我知道我可以从Visual Studio运行它,我更喜欢这种方法).我已将此虚拟目录命名为"mtp",我通过http://localhost/mtp/index.aspx访问它.这一切都很好.

但是,每当我尝试创建一个cookie时,它根本就不会被写出来?我在FF3和IE7中试过这个,它只是简单的不会写出cookie.我不明白.我的主机文件中有"127.0.0.1 localhost",我真的无法想到我能做的其他事情.谢谢你的建议.

詹姆士

cookies localhost

42
推荐指数
3
解决办法
3万
查看次数

为什么浏览器会忽略set-cookie标头,并且使用fetch不会从Ajax调用中保存cookie?

出于某种原因,我的浏览器(我尝试了几个)不设置cookie,即使服务器返回有效的set-cookie响应,当使用fetch api 通过Ajax进行GET调用来发出请求时

如果我通过将URL放在浏览器中进行相同的GET调用,则浏览器会尊重(相同的)set-cookie响应头并保存cookie.

我通过LiveHeaders和Chrome网络检查器检查了请求和响应标头,没有区别.

编辑:澄清一下,这不是ajax向服务器发送cookie的问题.这是一个问题,当一个响应返回时,有效的set-cookies标题(根据文档应该遵守是否ajax),浏览器根本不保存cookie.

javascript cookies ajax fetch

20
推荐指数
1
解决办法
1万
查看次数

如何在Jetty上的Spring应用程序中将jsessionid cookie路径更改为服务器根目录?

我有一个Jetty服务器在/app上下文中运行Spring应用程序.该应用程序使用会话,因此它设置会话cookie,响应如下:

set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/app; HttpOnly
Run Code Online (Sandbox Code Playgroud)

我需要cookie来获取路径/而不是webapp的上下文.另外,我想使用安全的cookie.我想要这个回复:

set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/; HttpOnly; Secure
Run Code Online (Sandbox Code Playgroud)

在哪里配置会话cookie的适当位置?春天有助于此吗?它应该在web.xml吗?或者我是否需要以容器特定的方式配置它,例如jetty-web.xml

我尝试了很多东西,但到目前为止还没有任何工作.以下是我尝试过的一些事情.


尝试#1

创建WEB-INF/jetty-web.xml如下:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Get name="sessionHandler">
      <Get name="sessionManager">
        <Set name="sessionCookie">MYJETTYSESSION</Set>
        <Set name="sessionPath">/</Set>
        <Set name="secureCookies" type="boolean">true</Set>
        <Set name="httpOnly" type="boolean">true</Set>
      </Get>
    </Get>
</Configure>
Run Code Online (Sandbox Code Playgroud)

这会导致抛出异常:

2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Set name="sessionPath">/</Set> java.lang.NoSuchMethodException: class org.eclipse.jetty.server.session.HashSessionManager.setSessionPath(class java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get> java.lang.NoSuchMethodException: class org.eclipse.jetty.server.session.HashSessionManager.setSessionPath(class java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionHandler"><Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get></Get> java.lang.NoSuchMethodException: class …
Run Code Online (Sandbox Code Playgroud)

java spring jetty session-cookies maven-jetty-plugin

16
推荐指数
1
解决办法
2万
查看次数

req.session.passport为空,未调用deserializeUser - ExpressJS,Passport

我在Passport/ExpressJS中使用会话时遇到问题.

当我登录时req.session,我可以看到护照是{}:

{ cookie: 
 { path: '/',
  _expires: Mon Sep 29 2014 19:37:16 GMT-0300 (BRT),
  originalMaxAge: 3594522,
  httpOnly: true,
  secure: true },
passport: {} }
Run Code Online (Sandbox Code Playgroud)

此外,我正在使用Facebook进行身份验证,并且passport.deserializeUser没有被调用.这是我的代码:

    passport.use(new FacebookStrategy({

    // pull in our app id and secret from our auth.js file
    clientID        : configAuth.facebookAuth.clientID,
    clientSecret    : configAuth.facebookAuth.clientSecret,
    callbackURL     : configAuth.facebookAuth.callbackURL

},

// facebook will send back the token and profile
function(token, refreshToken, profile, done) {

    // asynchronous
    process.nextTick(function() {

        console.log("profile " + profile.id);
        console.log("profile.name "+profile.name.givenName) …
Run Code Online (Sandbox Code Playgroud)

session node.js express passport.js

13
推荐指数
2
解决办法
6960
查看次数

在javascript中发送HTTP POST请求中的cookie

我试图通过javascript向服务器(这是一个REST服务)发出POST请求,并在我的请求中我想发送一个cookie.我的下面的代码无法正常工作,因为我无法在服务器上接收cookie side.Below是我的客户端和服务器端代码.

客户端 :

var client = new XMLHttpRequest();
          var request_data=JSON.stringify(data);
var endPoint="http://localhost:8080/pcap";
var cookie="session=abc";
          client.open("POST", endPoint, false);//This Post will become put 
          client.setRequestHeader("Accept", "application/json");
          client.setRequestHeader("Content-Type","application/json");

          client.setRequestHeader("Set-Cookie","session=abc");
          client.setRequestHeader("Cookie",cookie);
          client.send(request_data);
Run Code Online (Sandbox Code Playgroud)

服务器端:

public @ResponseBody ResponseEntity getPcap(HttpServletRequest request,@RequestBody PcapParameters pcap_params ){

Cookie cookies[]=request.getCookies();//Its coming as NULL
        String cook=request.getHeader("Cookie");//Its coming as NULL
}
Run Code Online (Sandbox Code Playgroud)

javascript cookies http-post httprequest http-headers

10
推荐指数
2
解决办法
4万
查看次数

HttpContext.Current.Items ["value"]无效,因为AngularJS调用创建新会话

我正在使用C#,MVC和AngularJS.

我的问题是我的MVC程序创建了一个HttpContext.Current.Items["value"]并在初始主控制器中设置了值,但是当我的AngularJS用ajax调用命中应用程序时,它会创建一个新的会话而我无法获得我之前在HttpContext.Current.Items["value"]调用中设置的值.

我有什么办法可以解决这个问题吗?我想继续使用HttpContext.Current.Items["value"].

为什么我的AngularJS调用会创建新的会话?我知道会话是新的原因是因为我使用它时它们有不同的ID:

String strSessionId = HttpContext.Session.SessionID;
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc angularjs

9
推荐指数
1
解决办法
5248
查看次数

调用客户端重定向后,会话属性将丢失

以前,servlet使用response.sendRedirect("pages/my_page.jsp?foo=bar");没有问题.可以在重定向到的后续页面中检索会话属性.

目前,我正在改变发送请求的方式.最初,Javascript使用myForm.submit();,但我现在已将其更改为jQuery.ajax("my_page.jsp?foo=bar", {...});.然后,servlet在JSON响应中包含一个URL,而不是response.sendRedirect()success函数中,我window.location.replace(url);用来导航到新页面.但是,无法在后续页面中获取已保存的会话属性.

我通过插入<%= session.getId() %>JSP页面来比较会话ID .他们是一样的.这里的问题是重定向到的页面中的session.getAttribute("myAttribute_1")返回null.

我不确定这是否重要,但我实际上是在使用多个JSP页面执行此任务:

A.jsp --- (redirect) ---> B.jsp --- (redirect) ---> C.jsp
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何获取保存的会话属性C.jsp


编辑

下面是我用来保存会话属性的代码片段.

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(true);

    response.setContentType("application/json");

    CustomObject customObject = new CustomObject();
    // ...
    session.setAttribute("myAttribute_1", customObject);

    PrintWriter writer = response.getWriter();
    JsonObject json = new JsonObject();
    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    json.addProperty("url", "next_page.jsp?foo=bar"); …
Run Code Online (Sandbox Code Playgroud)

javascript java session jquery jsp

8
推荐指数
1
解决办法
5889
查看次数