JavaScriptからCookieにアクセスできません。カスタムチェックのために、値を読み取ってJSON経由で送信する必要があります。
JSからCookieにアクセスしようとしました。
コードでわかるように、次のクリスタルのように明確に見えます:
var c_value = document.cookie;
ChromeのWebデバッガーからdocument.cookie
値にアクセスしようとすると、Watch式で空の文字列のみが表示されます:
したがって、必要なcookieの値を読み取ることができません。
関連する値を取得するために送信しているCookie名を確認しましたIS正しい。また、W3Schoolsを使用しています興味がある場合は、Cookieを取得するためのソースコード(ただし、2番目のリンクからのテクニックは似ています)。
どうすれば問題を修正できますか?
ありがとう!
ほとんどの場合、httponly
Cookieを処理しています。 httponly
は、Cookieに設定できるフラグで、JavaScriptからアクセスできないことを意味します。これは、悪意のあるスクリプトが機密データやセッション全体でCookieを盗むのを防ぐためです。
したがって、httponly
フラグを無効にするか、JavaScriptにデータを取得する別の方法を見つける必要があります。
コードを見ると、http onlyフラグを簡単に無効にできます。
Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });
これで、JavaScriptからCookie情報にアクセスできるはずです。ただし、取得しようとしているデータの種類が正確にはわからないので、代わりに別のアプローチに進み、たとえば、Cookieを読み取ろうとする代わりに必要な情報でページにデータ属性をレンダリングできます。
<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
cookieはPathの下のサブディレクトリにのみ表示されるため、CookieのPath属性にも注意してください。あなたの問題があり、パス「/」の設定を解決しました
私はhttpだけがあなたの最初の犯人であると言いますが、これはあなたのクッキーの範囲を設定しないことによって起こることもあります.
サイトが別のドメインからリダイレクトされている場合は、Cookieのスコープを設定する必要があります。ドメインとパスは、Cookieのスコープ、Cookieの送信先URLを定義します。これによっては、応答にCookieが表示されない場合があります。
成功したSAML SSOログインでCookieを設定するときにこの問題に遭遇し、リクエストの一部として送信されなかったため、ドキュメントからCookieを取得できませんでした。
CookieがSet-Cookie
またはSet-Cookie2
として設定されている場合、それは応答ヘッダーコレクションの一部ではありません。 http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28 %29-method
フィールド名がSet-CookieまたはSet-Cookie2であるものを除き、応答からすべてのヘッダーを返します。
何らかの安全な認証を使用している場合、その場合は安全のため直接クッキーにアクセスできません。以下のコードを使用して、サーバー側の応答属性を変更する必要があります。
Response.AddHeader( "Set-Cookie"、 "CookieName = CookieValue; path = /;"); Response.SetCookie(new HttpCookie( "session-id"){値= Guid.NewGuid()。ToString()、HttpOnly = false}); Response.SetCookie(new HttpCookie( "user-name"){値= data.Login、HttpOnly = false});
ただし、セキュアから非セキュアに変更される可能性があるため、そうすべきではありません。そのため、Cookieを削除していくつかの操作を実行できるようにするためにサーバー側で行う解決策を見つける必要があります。
サーバー側で変更を行うことができます。