Maison > php教程 > PHP开发 > le corps du texte

Exemple de code qui accède automatiquement à la page de connexion après l'expiration de la session

高洛峰
Libérer: 2017-01-07 09:36:15
original
2314 Les gens l'ont consulté

J'ai récemment travaillé sur un projet où il était nécessaire d'implémenter la fonction de connexion automatique. Après avoir consulté les informations pertinentes, j'ai prévu d'utiliser la surveillance de session pour le faire. Voici une liste de la façon de configurer l'écouteur :

.

1. Ajoutez le code suivant au fichier web.xml du projet :

<!--添加Session监听器-->
<listener>
<listener-class> 监听器路径 </listener-class>
</listener>
Copier après la connexion

2. Écrivez une classe Java.

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);
}
}
Copier après la connexion

Une fois la configuration terminée et la session expirée, il entre avec succès dans la méthode sessionDestroyed et est prêt à effectuer l'opération de saut de page. Soudain, je. a découvert comment écrire un saut et a été abasourdi, a continué à aller en ligne pour consulter les experts et a découvert que cette surveillance est destinée à un traitement statistique en arrière-plan et ne peut pas réaliser la fonction de saut de page.

Nous ne pouvons qu'abandonner cette méthode et commencer à utiliser des filtres pour implémenter

1. Ajouter la configuration du filtre dans web.xml

<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>
Copier après la connexion

<. 🎜>

2. Créez une nouvelle classe SessionFilter et implémentez l'interface Filter.

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
}
}
Copier après la connexion

3. Client JS, utilisé pour le délai d'expiration de la session de requête ajax

Pour 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>
Copier après la connexion

Pour une requête ajax extjs

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("请求超时请重新登陆 !");
}
}
}
Copier après la connexion

Si une requête ajax n'est pas affectée par la méthode globale, alors vous peut définir le global dans le paramètre sur false lors de l'utilisation de la méthode $.ajax() Le code jquery est le suivant :

$.ajax({
url:"test.html",
global:false//不触发全局ajax事件
})
Copier après la connexion

Comme mentionné ci-dessus. Il s'agit de l'exemple de code que l'éditeur vous présente pour accéder automatiquement à la page de connexion après l'expiration de la session. J'espère qu'il vous sera utile. Si vous voulez en savoir plus, veuillez faire attention au site Web PHP chinois !

Pour plus d'articles connexes sur un exemple de code qui passe automatiquement à la page de connexion après l'expiration de la session, veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal