0

是否有任何适当的方法来清除客户端的服务器端会话。我使用 java 脚本清除会话,但是当页面被重定向时,服务器端会话值将清除,即使此处未触发的 click 事件是我在 LI 的 ONCLICK 上调用的 java 脚本代码

<script type="text/javascript">
     function Clear_() {

         '<%=Session["UID"]=""%>';// only this line executes when ever the page is redirected.

         alert('ok');
     }
  </script>
4

5 回答 5

1

您好,您可以尝试使用此代码

function Clear()
{
    location.href="logout.aspx";
}

在文件 logout.aspx.cs 后面的代码中

  Session.Clear();
于 2012-07-29T17:40:48.363 回答
0

我认为不可能从客户端删除会话 bcz 会话是服务器端。如果我们从客户端浏览器中清除所有 cookie,则可能会发生一件事,然后当我们创建会话时,会话也可能被删除cookie 然后可能会被 session 也删除。

于 2012-07-29T18:21:35.390 回答
0

您可以做的是“从 javascript 调用服务器端页面并清除那里的会话”。

如果你使用 jQuery,就这么简单

<a href="somepage.aspx" id="logout">Logout</a>

<script type="text/javascript" >
 $(function(){
   $("#logout").click(function(e){
      e.preventDefault();
      $.post("logout.aspx",function(data){
          //now do something in client side. May be show a message to user
         alert("Succesfully logged out");
      });

   });
 });
</script>

假设在 logout.aspx 页面加载事件中,您正在清除 Session。用户注销后,您可能需要更新 UI 的某些部分(登录的用户名、一些链接等)。

于 2012-07-29T17:54:43.510 回答
0

发生这种情况的原因是在解析页面时,它总是寻找服务器端标签并首先执行它。它与解析服务器端控件相同。因此,即使您编写了代码,要触发任何按钮的单击事件,代码也会在每次加载时执行。即使您尝试在服务器标签中注释代码,该代码也会被执行。

功能清除_(){

    // '<%=Session["UID"]=""%>';// still this line executes

     alert('ok');
 }   </script>

您的问题的答案是否定的。会话存储为服务器端,那么你怎么能清除它 clide 端。您必须向服务器发出 AJAX 请求并清除服务器上的会话

更新 2

它与为服务器控制解析 aspx 页面相同。这些服务器标签需要在请求位于服务器时进行处理,然后评估值。例如,如果您希望从服务器上的某个会话值填充 javascript 中的某些值。

//在 javascript 中
var myValue = <%= Session["SomeVal"] %>

所以当页面被解析时,服务器标签内的值被评估并替换为它们的实际值(对于控制,它被替换为 html)。因此,在发送给客户端的最终输出中,将发送以下标记

//在javascript中
var myValue = 50;

您可以通过在浏览器中查看“查看源代码”进行验证。

于 2012-07-29T17:54:50.563 回答
0

您可以在 javascript 中使用页面方法

PageMethods.EndSession();

[WebMethod()]
public static void EndSession()
{
    HttpContext.Current.Session.Abandon();
}

不要忘记设置EnablePageMethodstrue脚本管理器。

于 2012-07-29T17:58:56.740 回答