セッションを使用せず、Cookieを使用せずにユーザー情報にアクセスするのに問題があります。セッションや Cookie を使わずにユーザー情報を管理するにはどうすればよいですか?? 助けてください
4 に答える
Web ブラウザーと HTTP について話していると仮定すると、できません。
HTTP はステートレスプロトコルです。サーバー側の状態でそれをオーバーロードするには、リクエスターを一意に識別する何らかの手段が必要です。また、Cookie は、Web ブラウザーがクライアント側の状態を維持する唯一の方法です。
[注記に編集] ただし、URI のクエリまたはフラグメント部分の一部として、限られた量の状態データを適切な URI に埋め込むことが考えられることを指摘しておく必要があります。ほとんどの (すべての?) 実装が URI の最大長に何らかの制限を課しているため、制限されています。さらに、Web アプリでは、状態データが URL から URL に適切に伝達されるようにする必要があります。また、URI の操作によってサイトがクラックされないように、セキュリティのために暗号化する必要があります。
MySQLデータベースを使用してユーザー情報を保存できます。ただし、残念ながら、セッション変数を使用せずに、ユーザーの資格情報を?username = dave password = catなどのURL変数で渡す必要があります(これは絶対に行わないでください)。または、セキュリティとセキュリティに関するいくつかのことを学ぶ必要があります。物事を正しい方法で行う(推奨)。
これは不必要な要件のように思えますが、以下の警告がありますが、試してみます。
ユーザーがログインすると、セキュリティ トークンが発行されます。そのトークンをデータベースに保存します。トークンには、名前やパスワードではなく、任意の値 (16 進数でエンコードされた GUID など) を含める必要があります。データベースには、トークンと実際のユーザー ID との関係も格納されます。トークンには有効期限が必要です。
URL の一部として、すべての要求とともにトークンを渡します (ASP.Net は Cookie のないセッションに対してこれを行います)。セッション状態を使用したくないため、ユーザーに関連する情報を別の場所 (おそらくデータベース) に保存する必要があります。すべてのページのすべての URL にトークンが必要です。
セキュリティ以外の情報については、Web ブラウザのローカル ストレージを利用することもできます。
非常に軽量なオブジェクトであっても、ASP.Net ではセッションが実用的でない場合があります。これは、セッション アクセスがシリアル化される方法が原因です。セッション関連の情報を認識する必要がある WCF エンドポイントに要求を行うウィジェットでいっぱいのダッシュボード ページがあるとします。そのエンドポイントがセッション状態を使用する場合、各リクエストが連続して実行されるため、パフォーマンスが低下します。
...同じセッションに対して (同じ SessionID 値を使用して) 2 つの同時要求が行われた場合、最初の要求はセッション情報への排他的アクセスを取得します。2 番目の要求は、最初の要求が終了した後にのみ実行されます。
http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx
各ページの非表示の入力でこれを行うことができますが、GET ではなくすべてに POST を使用することになります。これは非常にお勧めできません。