2017-10-06 3 views
1

を送信:実際には

c = &http.Cookie{ 
     HttpOnly: false, 
     Name:  "_cas_cookie", 
     Value: newSessionID(), 
     MaxAge: 86400, 
    } 

    http.SetCookie(w, c) 

、私は、ブラウザの検査ツールを使用してそれを見ることができます。また、「通常の」ブラウザのクリックごとにリクエストヘッダにも含まれます。しかし、それは私が送信するすべてのajaxクエリに含まれていません。私はfetch()とjQueryの$ .ajax()と同じ結果を使用しました。設計上、バックエンドコードは古いものを受け取らない場合は同じ名前の新しいクッキーを生成します。それが起こります。その新しいクッキーは、将来のすべてのajaxクエリーで使用されます。これは、httpクッキーとJavascriptクッキーが別々のドメインに存在するかのようです。私は、HttpOnlyの設定をfalseに設定するとこの問題は解決すると思っていましたが、そうではありません。

ここにfetch()コードがあります。

function doGetFetch(url, callback){ 
    fetch(
     url, 
     {method: 'get', 
     credentials: 'same-origin' 
     }) 
    .then( 
     function(response) { 
      if (response.status !== 200) { 
       console.log('Problem Status Code: ' + 
       response.status); 
       return false; 
      } 
      // Examine the text in the response 
      response.json().then(callback); 
     }) 
    .catch(function(err) { 
     console.log('Fetch Error :-S', err); 
    }); 
} 

ローカルホストテストサーバーを使用しても問題なく動作しますが、運用サーバーに展開すると問題が発生します。この2つの最大の違いは、ローカルホストがGolangの内部Webサーバー(i.G.、http.ListenAndServer())を使用し、プロダクションがCGIを使用することです。

お試しいただきありがとうございます。

+0

これは相互ドメイン要求の問題の可能性があります。プロダクションCGIサーバーのJavascriptは、それがローカルホスト上にこのような問題がない別のドメインにあると考えているかもしれません。しかし、まだわからない。 – Brent

答えて

1

私はクッキーのパスに問題を絞り込んだよりも優れたプログラマーです。上記のGoコードはパスを指定していないので、デフォルトのGoに設定されます。たとえば、パスは "/seminars.cgi"から "/seminars.cgi/seminar"まで変化し、すべての場合、JavascriptはCookieを認識できませんでした。解決方法は、ルートに明示的にパスを指定することでした。

c = &http.Cookie{ 
    HttpOnly: false, 
    Name:  "_cas_cookie", 
    Value: newSessionID(), 
    MaxAge: 86400, 
    Path:  "/", //Specify the path at the root 
} 

http.SetCookie(w, c) 

これは機能します。

関連する問題