2017-04-13 40 views
0

我必須開發一個Web應用程序,其中用戶在登錄頁面中輸入的值由多個jsp頁面使用。因此,我使用了會話。它在我註冊爲一個用戶並重新登錄。但是,一旦我重新啓動計算機,它會在session.getAttribute()中顯示空值。可能是什麼問題?jsp中的會話似乎無法正常工作

這裏是login.jsp中

try{ 
    Class.forName("com.mysql.jdbc.Driver"); 
    con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/vaishnavi","root","atreyasa"); 

    name=request.getParameter("username"); 
    password=request.getParameter("password"); 

    st=con.createStatement(); 
    st1=con.createStatement(); 

    rs=st.executeQuery("select * from admins where username='"+name+"' and password='"+password+"'"); 
    rs1=st1.executeQuery("select * from admins where username='"+name+"' and password!='"+password+"'"); 

    if(rs!=null&&rs.next()){ 
     session.setAttribute("username",name); 
     response.sendRedirect("http://127.0.0.1:8080/Project_programs/home.jsp"); 
    } 
    else if(rs1!=null&&rs.next()){ 
     out.println("Enter correct password"); 
    } 
    else{ 
    response.sendRedirect("http://127.0.0.1:8080/Project_programs/register.jsp"); 
    } 
} 
catch(Exception e){ 
    out.println(e); 
} 

回到Home.jsp()的代碼訪問session.getAttribute

out.println("<h1 align=center>Welcome "+session.getAttribute("username")+"</h1>"); 

回答

0

正如您所注意到的,session在您重新啓動機器後會被刪除。這是由於session財產的臨時性質。它存儲在內存中,所以當您重新啓動計算機時,它將被刪除。

這裏的解決方案是使用cookiesCookies是存儲在客戶端計算機上的小塊數據,隨客戶端的每個請求一起發送。 因此,當用戶請求一個頁面時,您可以檢查他是否有cookie,如果他有,那麼您可以從cookie中讀取數據並簽名,而不必再次輸入憑據。

設置與servlet的餅乾包括三個步驟:

(1)創建一個Cookie對象:你叫Cookie的構造函數用一個cookie名稱和cookie的值,二者都是字符串。

Cookie cookie = new Cookie("key","value"); 

請記住,無論是名稱也不值應包含空格或以下任何字符:[]()=「/ @:;

(2)設置的最大年齡:你使用setMaxAge到指定cookie多長時間(以秒爲單位)是有效的繼將設立一個cookie 24小時

cookie.setMaxAge(60*60*24); 

(3)發送的Cookie到HTTP響應頭:你使用response.addCookie在HTTP響應頭中添加cookie如下:

response.addCookie(cookie); 

當他收到響應時,將cookie存儲在客戶端的計算機上。

您可以在https://www.tutorialspoint.com/servlets/servlets-cookies-handling.htm

最佳, 的Jovan閱讀餅乾更詳細的教程。

+0

那麼,但會話將再次爲新的jsp請求創建?並且我在session.setAttribute()中再次設置這些值.... Iam仍然無法訪問。我剛剛注意到這是重新啓動後第一次登錄嘗試....一旦我註銷並再次登錄它正常工作 –

+0

沒錯,會話包含在客戶端發送的請求中。 如果我說得對,您重新啓動機器,嘗試訪問該頁面並要求您提供登錄憑據?然後,當你提供(即登錄),它從那裏順利運行? 如果是這樣,這是完全正常的,因爲正如我在上面的回答中提到的那樣,會話具有無常性,並在重新啓動機器時被刪除。 – solstinger

+0

一旦我給了登錄憑證......它在我重新啓動(或關閉並打開瀏覽器)後第一次顯示會話值爲null,並且在我登錄後再次登錄 –

0

您可以使用此代碼創建會話。

CreateSession(HttpServletRequest request, HttpServletResponse response) { 
    HttpSession session = request.getSession(); 
    session.setAttribute("useremail", user_useremail); 
    } 
+0

但會話是一個隱式對象嗎?有什麼需要重新創建它? –