iT邦幫忙

0

jsp session 值無法傳到所有頁面

如題,想請教
我有一個login.jsp
登入後會自動轉跳index.jsp

以上login.jsp的值是可以順利用session 傳到index.jsp


但是
我從index.jsp要去瀏覽b.jsp的內容時
b.jsp收不到session的值
但我跟login.jsp的寫法一樣...


以下程式

login.jsp

 <body> 
 <div id="head1"></div>
  <div class="container" > 
<form action = "login.jsp" method = "post"> 
帳號登入
帳號:  <input type="text" id="account"  name="account">
密碼:  <input type="password" id="passwd"  name="passwd">
 <button type="submit" name = "login" value = "登入">登入</button>
	        </form>
            </div>
	    </body> 
	</html> 
<% 
     String account = request.getParameter("account"); 
     String passwd = request.getParameter("passwd"); 
if(account.equals("1234")&&passwd.equals("1234"))
                { session.setAttribute("account", account);
                  response.sendRedirect("index.jsp");
                }
	%> 

index.jsp

    <% //把account 的值傳過來了
        Object objacc=session.getAttribute("account");
        String sacc = "";
        if(objacc!=null){
            sacc = objacc.toString();
            }
    %>
    <script>  //如果account的值是null會載入head.jsp,若不是則載入head_1.jsp
        var var1 = ""
       var1 = "<%=sacc%>"
        if(var1==null){
           $(document).ready(function () {
            $("#head1").load("../public/head.jsp");       
        });
        }
        else{
            $(document).ready(function () {
            $("#head1").load("../public/head_1.jsp");       
          });
          }
    </script> 
    </head>
 <body>
<div id="head1"></div>
 <div class="container">//index.jsp//</div>   
 </body>
</html>

b.jsp

    <%
        Object objacc=session.getAttribute("account");
        String sacc = "";  
        if(objacc!=null){
            sacc = objacc.toString();
            }
    %>
    <script>
    //如果account的值是null會載入head.jsp,若不是則載入head_1.jsp,但這裡都收不到 session.getAttribute("account")的值.....
        var var1 = ""
       var1 = "<%=sacc%>"
        if(var1==null){
           $(document).ready(function () {
            $("#head1").load("../public/head.jsp");       
        });
        }
        else{
            $(document).ready(function () {
            $("#head1").load("../public/head_1.jsp");       
           
          });
          }
    </script> 
    </head>
<body> 
<div id="head1"></div>
<div class="container">
 <h1>我是b.jsp</h1>
</div>
</body>
</html>

以下
head.jsp

<body>
<nav class="nav navbar-default">
        <div class="container-fluid">
            <div class="collapse navbar-collapse" id="myNavbar">
           <ul class="nav navbar-nav">     
      <li><a href="b.jsp">關於我們</a></li>
     </ul>
    <ul class="nav navbar-nav navbar-right"> 
  <li><a href="login.jsp"> Log in</a></li>
   </ul></div> </div>
    </nav> 

head_1.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<body>
  <%
        Object objacc=session.getAttribute("account");
        String sacc = "";
        if(objacc!=null){
            sacc = objacc.toString();
         
            }
    %>
<nav class="nav navbar-default" >
        <div class="container-fluid">
            <div class="collapse navbar-collapse" id="myNavbar">
                <ul class="nav navbar-nav">
      <li><a href="b.jsp">關於我們</a></li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
        <li><a href="index.jsp">welcome <% out.println(sacc);%>
            <% session.invalidate();%>
            </a></li>
                </ul>
            </div>
        </div>
    </nav> 

以上,想知道問題出在哪,麻煩大家了,謝謝

0
最佳解答

把login.jsp 的response.sendRedirect("index.jsp"); 改成response.sendRedirect("b.jsp"); 看能不能收到?

看更多先前的回應...收起先前的回應...
神威 iT邦新手 3 級 ‧ 2018-07-23 16:08:42 檢舉

你好:
我有試過,這樣是OK的
但是這樣其他頁面就會不OK
(我希望是多個頁面都能收到account的值
而且登入後我只想轉跳到首頁
而不是其他頁面.....

是用什麼瀏覽器測試? 每個頁面都在不同目錄下嗎? 
<% out.println(session); %> 在每個頁面把session印出來看看

神威 iT邦新手 3 級 ‧ 2018-07-23 16:33:25 檢舉

你好:
我用chrome
除了head.jsp 和head_1.jsp 在public資料夾以外
剩下的檔案全部在jsp資料夾


我在其他頁面上有試過了

 <%= session.getAttribute("account")%>

除了index.jsp之外,其他結果都是null

<% session.invalidate();%> 原來是加了這行~
/images/emoticon/emoticon10.gif

神威 iT邦新手 3 級 ‧ 2018-07-23 17:43:55 檢舉

報告:
去掉那行真的好了
但是我寫這樣是希望按到welcome這按鍵
user可以登出阿

   <li><a href="index.jsp">welcome <% out.println(sacc);%>
    <% session.invalidate();%>
    </a></li>

若不這樣寫
我的

 <% session.invalidate();%>

要放哪裡比較好呢?
怎麼讓user登出呢?

當然是user按了登出,轉到別的頁面再執行丫,或是用ajax再call別支jsp去執行~

神威 iT邦新手 3 級 ‧ 2018-07-23 17:56:46 檢舉

所以我按下welcome這連結
將session清空
再從head_1.jsp轉到head.jsp這樣不行嗎?

你寫那樣不是按下去才執行的意思,要按下去才執行,應該要放在 url 的連結那支jsp才對,要這樣寫

<a href="logout.jsp">登出</a>
神威 iT邦新手 3 級 ‧ 2018-07-24 09:12:15 檢舉

了解
我有做出來了
謝謝

1
暐翰
iT邦大師 3 級 ‧ 2018-07-23 17:23:35

你把session清掉了

session.invalidate()

請問為什麼要清掉呢
用戶還沒登出

神威 iT邦新手 3 級 ‧ 2018-07-24 09:13:42 檢舉

了解
我有做出來了
謝謝

0
Luke
iT邦新手 3 級 ‧ 2018-07-24 08:58:00

希望按到welcome這按鍵
user可以登出阿

建議您先去看一下
良葛格學習筆記

JSP 會轉譯為 Servlet,每個元素都有對應的 Java 元件。
Servlet/JSP 是一體兩面,想了解 JSP,先搞懂 Servlet。
您才知道為什麼?

因為您這個寫法就是,每次request 都去執行<% session.invalidate();%>

<ul class="nav navbar-nav navbar-right">
    <li><a href="index.jsp">welcome <% out.println(sacc);%>
    <% session.invalidate();%>
    </a></li>
</ul>

邏輯是要,點選welcome 事件,才去執行<% session.invalidate();%>
不是每次request 都去執行<% session.invalidate();%>

神威 iT邦新手 3 級 ‧ 2018-07-24 09:13:19 檢舉

了解
我有做出來了
謝謝

我要發表回答

立即登入回答