PHP关于检测用户是否登陆,以及设置拦截器(简单实现)

昨天没有午休,搞了一下午居然没搞明白,今天半个小时搞定了,看来还是早上效率高,看了午休还是必须的

进入正题,有注册系统的网站当然必须有安全机制 ,概述如下

 

  

 

1.登陆 需要检测用户的合法性

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<?php session_start(); include("conn/conn.php");?>
<?php
function clearSession(){//清楚SESSION方法
	session_start();    //启动会话
	session_unset();    //删除会话
	session_destroy();  //结束会话
}

$username=$_POST['username'];
$password=$_POST['password'];
$auth='common';
$res=mysql_query("select password,auth from userinfo where username='$username'");
if($row=mysql_fetch_array($res)){
	$base_password=$row[0];
	$base_auth=$row[1];
	if($base_password==$password){
	echo "登陆成功!";
	$url = "main.php";  //可以写成一句,但是这样比较符号html的 结构
	echo "<script language='javascript'type='text/javascript'>";  
	echo "window.location.href='$url'";  
	echo "</script>";  
	$_SESSION['username'] = $username;//注册username的SESSION
	}else{
	clearSession();//如果有SESSION也要清除
	echo "密码错误!";  
	echo "<script language='javascript'>alert(\"密码错误!!\");</script>";
	$url = "login.html";  
	echo "<script language='javascript'type='text/javascript'>";  
	echo "window.location.href='$url'";  
	echo "</script>";  
		
	}
}else{
	clearSession();
	echo "用户名不存在!";  
	echo "<script language='javascript'>alert(\"用户名不存在!!\");</script>";
	$url = "login.html";  
	echo "<script language='javascript'type='text/javascript'>";  
	echo "window.location.href='$url'";  
	echo "</script>";  
}
?>
2.在主页要检测是否登陆过,其实就是检测上面的username是否存在(当然也可以是密码+用户名),这个文件只要使用include 放到想要检测登陆的页面就可以了

<?php
session_start();
if($_SESSION[username]==""){
	echo "<script>alert('请登录!');window.location.href='login.html';</script>";
  }
?>

使用:<?php session_start();include "check_login.php";?>

3.如果要执行退出 那么先执行

<?php
	session_start();    //启动会话
	session_unset();    //删除会话
	session_destroy();  //结束会话
	header("location:login.html");
?>
删除SESSION ,跳转到login.html

 

这个只是简单的实现 ,估计真正的应用网站应该不会这么简单 ,这样的安全机制太容易攻破,好一点的方法是在检查登陆那里 实现查询数据库的操作,当然这样就要耗费cpu资源了

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于你的问题,我可以给你一些思路和代码示例。 首先,拦截器可以通过实现`HandlerInterceptor`接口来定义。具体实现如下: ```java @Component public class UserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行拦截,可以在这里获取用户信息 User user = (User) request.getSession().getAttribute("user"); // 假设用户信息存在session中 if (user == null) { response.sendRedirect("/login"); // 如果用户未登录,则跳转到登录页面 return false; } return true; } // 其他方法省略 } ``` 以上代码中,我们通过实现`preHandle`方法,在请求处理之前进行拦截。在这个方法中,我们可以通过`HttpServletRequest`对象获取到当前请求的信息,比如请求头、请求参数、Session等信息。如果我们在登录时将用户信息存储在Session中,那么我们可以通过`request.getSession().getAttribute("user")`来获取当前登录用户的信息。 接下来,我们需要将拦截器注册到Spring Boot中。这可以通过在配置类中添加`@Bean`注解来完成。具体实现如下: ```java @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private UserInterceptor userInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(userInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register"); // 设置拦截的路径 } } ``` 以上代码中,我们通过实现`WebMvcConfigurer`接口,将拦截器注册到Spring Boot中。我们使用`addInterceptors`方法来添加拦截器,并通过`addPathPatterns`方法来指定需要拦截的路径。在这里,我们设置拦截所有路径,但是排除了登录和注册页面,因为这些页面不需要用户登录即可访问。 最后,需要注意的是,我们在拦截器中获取用户信息时,需要确保用户已经登录。如果用户未登录,则需要将请求重定向到登录页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值