Heim > php教程 > PHP开发 > Hauptteil

Beispielcode, der nach Ablauf der Sitzung automatisch zur Anmeldeseite springt

高洛峰
Freigeben: 2017-01-07 09:36:15
Original
2313 Leute haben es durchsucht

Ich habe kürzlich an einem Projekt gearbeitet, bei dem die automatische Anmeldefunktion implementiert werden musste. Nachdem ich relevante Informationen konsultiert hatte, plante ich, dafür die Sitzungsüberwachung zu verwenden:

1. Fügen Sie den folgenden Code zur web.xml-Datei des Projekts hinzu:

<!--添加Session监听器-->
<listener>
<listener-class> 监听器路径 </listener-class>
</listener>
Nach dem Login kopieren

2. Schreiben Sie eine Java-Klasse.

public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent arg0) {
// session创建时执行
SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date());
User u=null;
//System.out.println("执行。。 当前时间:"+nowtimes+"_"+u);
HttpSession ses= arg0.getSession();
String id=ses.getId()+"_"+ses.getCreationTime();
}
public void sessionDestroyed(HttpSessionEvent arg0) {
// session失效时执行
SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date());
//System.out.println("session失效了。。 结束时间: "+nowtimes);
}
}
Nach dem Login kopieren

Nachdem die Konfiguration abgeschlossen ist und die Sitzung abläuft, wird die sessionDestroyed-Methode erfolgreich eingegeben und die Ausführung des Seitensprungvorgangs vorbereitet Wie man den Sprung schreibt, war fassungslos, ging weiter online, um die Experten zu konsultieren, und stellte fest, dass diese Überwachung einer statistischen Hintergrundverarbeitung dient und die Seitensprungfunktion nicht realisieren kann.

Wir können diese Methode nur aufgeben und mit der Verwendung von Filtern beginnen

1 Filterkonfiguration in web.xml hinzufügen

<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.orchestrall.web.helper.session.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/actions/*</url-pattern>
</filter-mapping>
Nach dem Login kopieren

2. Erstellen Sie eine neue SessionFilter-Klasse und implementieren Sie die Filter-Schnittstelle.

public class SessionFilterimplements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession();
// 登陆url
String loginUrl = httpRequest.getContextPath() + "/admin/login.jsp";
String url = httpRequest.getRequestURI();
String path = url.substring(url.lastIndexOf("/"));
// 超时处理,ajax请求超时设置超时状态,页面请求超时则返回提示并重定向
if (path.indexOf(".action") != -1
&& session.getAttribute("LOGIN_SUCCESS") == null) {
// 判断是否为ajax请求
if (httpRequest.getHeader("x-requested-with") != null
&& httpRequest.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest")) {
httpResponse.addHeader("sessionstatus", "timeOut");
httpResponse.addHeader("loginPath", loginUrl);
chain.doFilter(request, response);// 不可少,否则请求会出错
} else {
String str = "<script language=&#39;javascript&#39;>alert(&#39;会话过期,请重新登录&#39;);"
+ "window.top.location.href=&#39;"
+ loginUrl
+ "&#39;;</script>";
response.setContentType("text/html;charset=UTF-8");// 解决中文乱码
try {
PrintWriter writer = response.getWriter();
writer.write(str);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
Nach dem Login kopieren

3. Client JS, verwendet für Ajax-Anfragesitzungs-Timeout

Für JQuery

<script type="text/javascript">
$(document).ajaxComplete(function(event, xhr, settings) {
if(xhr.getResponseHeader("sessionstatus")=="timeOut"){
if(xhr.getResponseHeader("loginPath")){
alert("会话过期,请重新登陆!");
window.location.replace(xhr.getResponseHeader("loginPath"));
}else{
alert("请求超时请重新登陆 !");
}
}
});
</script>
Nach dem Login kopieren

Für extjs-Ajax-Anfragen

Ext.Ajax.on(&#39;requestcomplete&#39;,checkUserSessionStatus, this);
function checkUserSessionStatus(conn,response,options){
if(response.getResponseHeader("sessionstatus") == &#39;timeout&#39;){
if(response.getResponseHeader("loginPath")){
alert("会话过期,请重新登陆!");
window.top.location.href = response.getResponseHeader("loginPath");
}else{
alert("请求超时请重新登陆 !");
}
}
}
Nach dem Login kopieren

Wenn eine Ajax-Anfrage nicht von der globalen Methode betroffen ist, dann Sie kann den Parameter global auf false setzen, wenn die Methode $.ajax() verwendet wird. Der JQuery-Code lautet wie folgt:

$.ajax({
url:"test.html",
global:false//不触发全局ajax事件
})
Nach dem Login kopieren

wie oben erwähnt Dies ist der Beispielcode, den Ihnen der Editor vorstellt, um nach Ablauf der Sitzung automatisch zur Anmeldeseite zu springen. Wenn Sie mehr wissen möchten, schauen Sie sich bitte die chinesische PHP-Website an.

Weitere verwandte Artikel zu Beispielcode, der nach Ablauf der Sitzung automatisch zur Anmeldeseite springt, finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage