前提・実現したいこと
セッションIDを維持したいです。
(ログイン画面のログイン処理でセッションに保存したユーザIDをその後に続く画面で共有したい)
発生している問題・エラーメッセージ
ログイン時にセッションに保存したユーザIDが、
ログアウトボタン(IMG_BTN_LOG_OUT)をクリックした段階で別のセッションに変わってしまい、
ユーザIDを取得できない状況です。
①ログイン画面と②トップ画面があり、①→②の場合はユーザIDを受渡しできています。
②の画面でボタンクリックをするとセッションIDが変わってしまいます。
①で作ったセッション情報を使ってログアウト処理で行うユーザ管理データベース処理を行いたいです。
(セッションを維持できれば、別の画面でもユーザ情報を使いたいです)
ソースコード
※コントロールボックスの呼び出し元 <%@ Page Title="" Language="C#" MasterPageFile="~/common/base.master" AutoEventWireup="true" CodeFile="Top.aspx.cs" Inherits="Top" %> <%@ Register Src="~/common/Data.ascx" TagPrefix="uc1" TagName="だたBox" %> <%@ Register Src="~/common/ControlBox.ascx" TagPrefix="uc1" TagName="ControlBox" %> <asp:Content ID="CPH_Content1" ContentPlaceHolderID="CPH_Content1" Runat="Server"> <uc1:ControlBox runat="server" ID="ControlBox" />※今回の質問の対象です <uc1:DataBox runat="server" ID="DataBox" /> </asp:Content> ※ControlBox.ascx(コントロールボックスと呼んでいてここにはユーザ名やボタンを配置しています) <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ControlBox.ascx.cs" Inherits="common_ControlBox" %> <link href="../css/main.css" rel="stylesheet" type="text/css" /> <!--- ユーザコントロールボックス ---> <div class="controlBox"> <div class="Name"> <asp:Label runat="server" ID="LBL_NAME" CssClass="" /> </div> <div class="BtnInner"> <asp:ImageButton id="IMG_BTN_LOG_OUT" onclick="BTN_Click" runat="server" ImageUrl="../images/cmd_logout.gif" class="cmdButton" /> </div> </div> ※ControlBox.ascx.cs public partial class common_ControlBox : System.Web.UI.UserControl { //ページ読み込み初期処理 protected void Page_Load(object sender, EventArgs e) { // ポストバック時はリターン(何も処理しない) if (IsPostBack == true) {return;} //画面更新毎 //ログイン画面から遷移したときにはセッションにユーザIDがあることを確認できたました //コントロールボックスに配置したボタンをクリックするとセッションからユーザIDはが取得できないので消えてしまうのでポストバック時はリターンの処理をいれました refreshDisplay(); } //セッションIDを確認するために追加 protected void Page_Init(object sender, EventArgs e) { //★セッションIDが変わってしまうことをブレークポイントを張って確認しました Session["SESSION_DATE_NOW"] = DateTime.Now; } //コントロールボックスのボタン処理 protected void BTN_Click(object sender, EventArgs e) { //押下されたボタンによって処理を分岐 string id = ((ImageButton)sender).ID; switch (id) { case "IMG_BTN_DL": //DLボタン押下 //セッションに保存したユーザIDを次の画面でも利用したいがセッションIDが変わってしまうので取得できない Server.TransferRequest("DL.aspx"); break; case "IMG_BTN_LOG_OUT": //ログアウトボタン押下 logout();//★ここでDBからログイン情報を削除したいがログアウトボタンをクリックしたときにはセッションIDが変わってしまう break; default: break; } } }
試したこと
ログイン画面のログインボタンの処理を
Server.TransferRequest("top.aspx")から
Response.Redirect("top.aspx")に変更したが、セッションIDが変わってしまいます。
ControlBox.ascxにはユーザ名を表示するLBL_NAMEがありますが、
ログアウトボタンをクリックしたときには空文字になっています。
セッションがだめならhiddon項目にしたラベルからユーザIDを取得を試みましたができず・・・
参考URL
https://ameblo.jp/friskpanda/entry-11364901611.html
http://hensa40.cutegirl.jp/archives/842
https://www.it-swarm.dev/ja/asp.net/aspnet%EF%BC%9A%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E9%96%93%E3%81%AEsessionsessionid%E3%81%AE%E5%A4%89%E6%9B%B4/969626190/
(基本的に、バックエンドでセッションオブジェクトにアクセスしない限り、リクエストごとに新しいsessionIdが生成されます、というのが気になりPage_Initを追加したが効果なし)
検索したワード
ASP C# セッションID 維持
ASP C# セッションID 変わってしまう
【 補足情報】
OS:WindowsServer2012 Standard
Microsoft Visual Studio Enterprise 2019
C# .net framework 4.5
ASP.net:4.5 Web Forms
StateServer環境(同一PC)
非MVC環境
私自身は、今回ASPで画面を作るのは初めてです。
元々社内にあるシステムの追加で作ったページなのですが、
セッション管理のない独自仕様のフレームワークでそれならと新規作成しました。
工数的に後戻りできないので、今の作りでセッションを維持したいと考えています。
ほかに必要な情報がありましたら追加しますので、コメントにて教えてください。
回答2件
あなたの回答
tips
プレビュー