iT邦幫忙

0

jsp會員權限驗證

temo 2017-11-19 18:12:305551 瀏覽

目前在做會員登入權限驗證,有幾種想法不過感覺不太對,想請問有更簡單的寫法嗎?

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	            		con = DriverManager.getConnection(connectionUrl);
	            
	            		// Create and execute an SQL statement that returns some data.
      					String SQL = "SELECT * FROM dbo.Member where username=? and password=?";
      					PreparedStatement pstmt = con.prepareStatement(SQL);
      					pstmt.setString(1, username);
      					pstmt.setString(2, password);
	            		rs = pstmt.executeQuery();
	
	if(rs.next())
	{
		if(rs.getString(4))
		response.sendRedirect("Member.jsp");
	}

第一種我把會員資料都寫在同一個資料表中並設一個權限欄位,抓出值在比對權限丟到特定網頁,這樣管理者要去資料表把每個會員的權限欄位填值

	<select>
	<option>會員</option>
	<option>高級會員</option>
	</select>

還有另一種是不同會員建立不同table,在前端建立select讓使用者自己選擇身分,然後後端再用身分確認去不同table撈資料,不過這種沒再網路上看人做過

看過php驗證那篇,角色是再另外建立一個權限資料表,再由會員資料表去比對權限嗎??
因為這樣跟在會員資料裡設一個權限欄位好像一樣?

請問還有其他方式可以由登入判斷權限嗎?

1 個回答

0
fysh711426
iT邦研究生 4 級 ‧ 2017-11-19 21:13:50
最佳解答

上面兩種小弟都做過,其實都可以
前端部分,可以做成單一登錄,也可以單一登錄多個下拉選單選身分,也可以各個身分分開登錄。
後端部分,可以拆表也可以不拆,都能達到需求,
然後您提到的腳色權限資料表,這個拆與不拆其實只是正規化和不正規化的問題,
拆表最終還是要 Join 起來。

然後小弟分享一下現在習慣的做法,只講資料庫部分,前端主要看專案需求,
一張表只儲存帳號相關的資料,例如: 帳號、密碼、Email,一張表儲存身分,例如: 管理者、教師、學生,一張表儲存帳號之外的基本資料,例如: 學號、職員代碼、姓名、性別,如果各身分基本資料差異很多,那麼會另外獨立資料表,例如: 學生資料表、教師資料表。

以上是小弟的一些經驗,給大大參考
/images/emoticon/emoticon35.gif

temo iT邦新手 1 級 ‧ 2017-11-20 07:25:45 檢舉

表切成多張join時會比較花點時間吧?

多張表分開登陸跟下拉選單選身分在網路上很少看到這樣寫

是這種方法在實際應用上不實用嗎??

fysh711426 iT邦研究生 4 級 ‧ 2017-11-20 09:09:09 檢舉

Join 會多花時間,但以現在資料庫的速度,索引有建好,基本上可以忽略 XD

多張表分開登陸跟下拉選單選身分在網路上很少看到這樣寫

很多需要管理後台的網站,都會把管理者和般使用者的登錄分開,學校網站也會把學生登錄和教師登錄分開,我也看過用下拉選單的,主要還是看專案需求,我有問過強者同事為什麼要這麼做,他說可以防止別人 try 密碼,不過這也不是絕對安全,因為還是有可能被搜尋引擎找出來。
/images/emoticon/emoticon39.gif

我要發表回答

立即登入回答