2012-10-10 78 views
3

在PHP中,當用戶登錄到她的帳戶時,我會執行以下操作以便在瀏覽網站時記住用戶:

session_start(); 
... 
$_SESSION['username'] = $username; 

在任何其他可能需要敏感數據的頁面上,我檢查$_SESSION['username']是否有效。

當使用註銷時,我做了以下

unset($_SESSION['username'] 
session_destroy(); 

我如何做同樣的事情在Java中?我有一個使用JerseyEJB的REST API。在以下情況很重要的情況下,我堅持使用JPA,Hibernate,Glassfish和mysql。

更新爲VERIFICATON:

這是正確的嗎?

@Path("login") 
public class UserLoginResource { 

    @EJB 
    private LoginDao loginDao; 

    @Context 
    HttpServletRequest request; 

    @POST 
    public Response login(JAXBElement<Login> jaxbLogin){ 
    Login login = jaxbLogin.getValue(); 
    loginDao.authenticateUserLogin(login); 
    HttpSession session = request.getSession(); 
    session.setAttribute("username", login.getUsername()); 
    return Response.ok().build(); 
    } 
} 

回答

3

Java是從PHP很大的不同,所以在Java中,你將只HttpRequestgetSession()方法獲取會話,在PHP中,假設所有的時間,你的代碼是由一些服務器上運行(即Apache的),在java,你將從ServletContainer(即Apache Tomcat)獲得它。

您不必在象PHP的java啓動會話,只要你是在servlet容器,並給予請求,這個客戶端的servlet容器負責啓動,如果沒有會話它

所以對於以上動作:

reqest.getSession().setAttribute("udername","Elbek"); 
    //later 
    reqest.getSession().removeAttribute("udername"); 

    //destroy it 
    reqest.getSession().invalidate(); 

這裏requestHttpRequest類的對象

你可以看看這個HttpSession

我強烈建議你去看看Java的scopes

沒有這種在PHP的事情,我希望有,NO

Here是你怎麼弄的請求對象爲你的球衣動作(方法),通過注入@Context HttpServletRequest httpRequest

編輯,即: 你不自己創建HttpRequest對象,相反,你會從servlet的,包含3個明白你的服務器根據客戶請求創建它,併爲你提供。

+0

感謝您的回覆。我仍然試圖讓它工作。在我討論的php版本中,服務器能夠區分1000個用戶,並且明白'$ _SESSION ['username']'對於每個用戶是不同的。 java版本也能做到這一點嗎?我正在閱讀各地,可能會讓我感到困惑。 – kasavbere

+0

當然java是的,不管用什麼語言,http會話的概念都是一樣的。 – Elbek

+0

爲了確保正確無誤,我在原始文章中包含了代碼。它看起來正確嗎?基本上,在其他Web服務中,我將調用'session.getAttribute(「username」)'來檢查匹配的用戶名。謝謝。 – kasavbere

0

+ elbek描述了簡單的servlet情況 - 但是,現在幾乎沒有人寫簡單的servlet。它在那個時候變得很憔悴,許多Web框架都在演變。有一些是他們的,但好的將使用依賴注入技術,如彈簧
(例如,struts 2),並且有不同的範圍 - 應用程序/會話/請求 - 包含普通的java bean,它們可以反過來認證數據。

J2EE還爲servlet容器和JAAS提供了自己的身份驗證語義 - 它還使用會話跟蹤,在需要訪問數據源或隊列或EJB等後端資源時非常有用 - 但大多數Web應用程序都不會打擾它。

相關問題