はじめに: ASP.NET にログインした後、JSP は ASP.Net のセッションの値を使用できるようになります。Baby (itbaby.jss.cn) のアイデアは、シリアライズされたセッションです。 ASP.NET はバイナリ データとしてデータベースに保存され、JSP はデータベース内のバイナリ データを読み取り、Session
オブジェクト
に逆シリアル化し、JAVA 側での変換中に強制的に変換します。という問題
が発生し、インターネットで検索しても解決できなかったので、置換方法
を使用しました。ログインに成功した後、ログインした ASPX ファイルに変数の値を保存します
。データベース内のテーブルへのセッション。キーワードは ASP.NET の Session オブジェクトの SessionID を使用し、ASPX ファイルを作成し、現在ログインしているユーザーの SessionID
を取得し
、ASP.NET リダイレクト ステートメントを使用して次のテーブルに移動します。 JSP ファイルのパス形式は test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45 です。ASP.NETがログインしていない場合、またはログインが失敗した場合は、SessionID に関連付けられたデータがありません。データベース内の SessionID。test.jsp
?aspnetsessionid=ffj12d455p0ujr45vdqwhh45 などのリクエスト パスを使用せずにリクエストを完了できることに気づく人もいるでしょう。もちろん、userid=1111
も
値を転送できます。は ASP.NET が正常にログインした後に取得される値ですが、この方法では一部のユーザーが USERID (ユーザー番号) の機密データを知ることができます。
テーブルを作成する
テーブル名:
iis_セッション
フィールド名:
id varchar(26) --ASP.NET のセッション ID を保存します。
userid int(4) – ログイン成功後のユーザー番号を保存します。
power int(4) -- ユーザーの許可番号を保存します。
ASP.NET プログラムのソース コードの一部:
/*ログインに成功した後、次のコードをログイン検証 ASPX ページに配置できます*/
//セッション値をデータベースに記録します
private void WriteSession2DB(文字列セッションID、文字列sUID、文字列sPWR)
{
// データベース コードに接続します。読者は自分でコードを追加できます
文字列セッションID = セッションID;
string strSQL = "insert into iis_session(id,userid,power)values(@seionID,@UID,@PWR)";
//webmod.sqlConn はデータベースの接続オブジェクトであり、リーダーはそれを独自のデータベース接続に置き換えることができます。
SqlCommand sqlCmd = 新しい SqlCommand(strSQL,webmod.sqlConn);
sqlCmd.Parameters.Add("@seionID",SqlDbType.VarChar).Value = sessID;
sqlCmd.Parameters.Add("@UID", SqlDbType.Int ).Value = Convert.ToInt32(sUID.Trim());
sqlCmd.Parameters.Add("@PWR", SqlDbType.Int).Value = Convert.ToInt32(sPWR.Trim());
sqlCmd.ExecuteNonQuery();
//データベース接続を閉じます。読者は自分で追加できます
}
/*ユーザーがシステムを終了すると、データベース内の SessionID に対応するデータ行を削除します。これは、終了ページまたは Global.asax の Session_END プロセスに配置できます*/
//データベース内のセッション値を削除します
private void RemoveSession4DB()
{
// データベース コードに接続します。読者は自分でコードを追加できます
文字列sessID =セッション.セッションID;
string strSQL = "delete from iis_session where id='"+sessID+"'";
//webmod.sqlConn はデータベースの接続オブジェクトであり、リーダーはそれを独自のデータベース接続に置き換えることができます。
SqlCommand sqlCmd = 新しい SqlCommand(strSQL,webmod.sqlConn);
sqlCmd.ExecuteNonQuery();
//データベース接続を閉じると、読者が自分でデータベース接続を追加できるようになります
}
/*ASPX ページが JSP にリダイレクトされ、この ASPX ページの PAGE_LOAD に次のコードを追加します*/
private void Page_Load(オブジェクト送信者、System.EventArgs e)
{
文字列 strSessionID = Session.SessionID.Trim();
文字列 strRoot = " http://localhost/test.jsp?aspnetsessionid="+strSessionID ;
Response.Redirect(strRoot,true);
}
JSP プログラムのソース コード スニペット:
<%@ page contentType="text/html;charset=gb2312"%>
<%
/*
独自のデータベース接続クラス。ユーザーはそれを自分で置き換えることができます
*/
%>
<jsp:useBean id="db"scope="page" class="com.itbaby.bean.dbx.database"/>
<%
String sASPNetSessionID=request.getParameter("aspnetsessionid");
//接続プール接続は使用されているデータベースは、ユーザーが独自のデータベースに置き換えることができます
文字列 sDBSourceName="itbaby_dbpool";
db.dbConnOpen(sDBSourceName);
String sSql="select userid,power from iis_session where id='"+sASPNetSessionID+"'";
// リーダーは結果セットを読み取るためのコードを自分で置き換えることができます。
java.sql.ResultSet rs=db.getRs(sSql)
;
{
文字列 sUID = rs.getString(1);
String sPower = rs.getString(2);
/*データベース内の対応する SESSIONID 値を読み取り、それを表示します。ASP.NET SESSION がタイムアウトした場合、値はありません。
out.print("<H1>ASP.Net セッション値 UserID = "+sUID+"</H1><br><br>");
out.print("<H1>ASP.Net セッション値 Power = "+sPower+"</H1><br><br>")
;
rs.close();
db.dbConnClose();
%>
これはあまり良い方法ではありませんが、使用することはできます。また、ユーザーの一部の機密データも保護するため、シリアル化と逆シリアル化の使用を検討していきます。上記の代わりに、異なる WEB 言語間で Session オブジェクトの共有を実現する方法、Session 値の共有