很多站长朋友们都不太清楚php登录保护机制,今天小编就来给大家整理php登录保护机制,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php的网络访问机制是什么? 2、 请描述 php session 的运行机制,大型网站中session方面应注意什么 3、 php session 的原理机制是什么? 4、 php 登录权限问题,同一个页面,权限不一样,登录以后看到的功能也不一样,谁有代码最好贴出来 5、 php用户登录不管用户名密码是否正确都能登录是怎么回事 6、 请教用PHP实现自动登录问题 php的网络访问机制是什么?client向server提交访问申请,server根据申请内容,经过一定的算法处理,把最终的输出信息以HTML的形式返回给client
请描述 php session 的运行机制,大型网站中session方面应注意什么运行机制:客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入
注意:1,session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,可以通过修改php.ini中session.save_path设置两级子目录 ,session将存储在两级子目录中,每个目录有16个子目录[0~f],不过好像PHP session不支持创建目录,你需要事先把那么些目录创建好 。
php session 的原理机制是什么?首先说一下在php中如何操作session
session_start(); //使用该函数打开session功能
$_SESSION //使用预定义全局变量操作数据
$_SESSION['user'] = 'php'; //定义一个session
echo $_SESSION['user']; //输出session
使用unset($_SESSION['user']) //销毁一个session的值
简单地操作,一切都是由服务器实现;由于处理在后台,一切看起来也很安全。但是session采用什么样机制,又是怎样被实现,并且如何来保持会话的状态的呢?
下面我们了解一下session实现与工作原理
浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢?
这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字,
或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上
由服务器为它生成的session_id.
简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,
浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。
以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。
如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。
php 登录权限问题,同一个页面,权限不一样,登录以后看到的功能也不一样,谁有代码最好贴出来-----------------------------------------以下是设置权限比较常用的一种
1----你用mysql或记事本等工具储存用户信息的时候加一个字段”user_rank“,用于判断用户的级别(如:管理员值user_rank=admin、普通用户user_rank=user)。
2----你在所使用的页面前可以提取当前用户的user_rank值,然后用if语句来判断用户级别,分配给当前用户一定的权限代码如下:
if($user_rank == "admin")
{
/*对管理员显示的页面输出*/
//执行删除的语句
//执行增加的语句
}
else if($user_rank == "user")
{
/*对普通用户,执行浏览*/
}
----------------------------------------------------------------
不明白再问我。
php用户登录不管用户名密码是否正确都能登录是怎么回事在输入值不是空值的时候,没有做数据验证,在else中接受数据值后进行正则验证数据输入的正不正确。还有,在mysql查询后你判断的只是一个结果集,如果查询结果为空的话,结果集里面还是有内容的,所以你应该把结果集取成数组,判断这个数组不为空值的时候,再成功登陆!!!
请教用PHP实现自动登录问题1、在登录页面中添加一个复选框,让用户选择是否愿意在一定时间内实现自动登陆,例如两周。
代码:
<input type="checkbox" name="autologin">两周内自动登录
2、在负责处理登录过程的Servlet中,判断用户是否选择了该复选框。如果是,则执行这两个操作:向用户发送两个Cookie,以及向数据库写入一条相应的记录。
代码:
Cookie ckUsername, ckSessionid;
if (autologin.equals("on")) {
// 如果用户选择了“两周内自动登录”,则向用户发送两个cookie。
// 一个cookie记录用户名,另一个记录唯一的验证码,
// 并将此验证码写入数据库,以备用户返回时查询。(防止伪造cookie)
ckUsername = new Cookie("autoLoginUser", user.getUsername()); // user是代表用户的bean
ckUsername.setMaxAge(60 * 60 * 24 * 14); //设置Cookie有效期为14天
res.addCookie(ckUsername);
sessionid = session.getId(); // 取得当前的session id
ckSessionid = new Cookie("sessionid", sessionid);
ckSessionid.setMaxAge(60 * 60 * 24 * 14);
res.addCookie(ckSessionid);
// 在数据库中插入相应记录
userSessionDAO.insertUserSession(user, sessionid);
}
3、实现自动登录。因为用户下次访问的时候,可能直接访问网站的任何页面(例如通过收藏夹),而不一定是首页或者登录页面,所以我们需要用Filter拦截到达该网站的所有请求,并执行自动登录。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(true);
String username;
String sessionid; // 此sessionid是上次用户登录时保存于用户端的识别码,用于用户后续访问的自动登录。不是本次访问的session id。
Cookie[] cookies;
CookieManager cm = new CookieManager(); // CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值。
boolean isAutoLogin;
// 如果session中没有user对象,则创建一个。
User user = (User) session.getAttribute("user");
if (user == null) {
user = new User(); // 此时user中的username属性为"",表示用户未登录。
}
// 如果user对象的username为"",表示用户未登录。则执行自动登录过程。
// 否则不自动登录。
if (user.getUsername().equals("")) {
// 检查用户浏览器是否发送了上次登录的用户名和sessionid,
// 如果是,则为用户自动登陆。
cookies = request.getCookies();
username = cm.getCookieValue(cookies, "autoLoginUser");
sessionid = cm.getCookieValue(cookies, "sessionid");
isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在数据库中找到了相应记录,则说明可以自动登录。
if (isAutoLogin) {
user.setUsername(username);
user.setNickname(DBUtil.getNickName(username));
session.setAttribute("user", user); // 将user bean添加到session中。
}
}
chain.doFilter(req, resp);
}
关于php登录保护机制的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php登录保护机制 php保持登录状态的详细内容...