dedecms--二次开发之会员帐号过期无法登录
最近在二次开发织梦系统的会员功能;要求会员帐号有期限,开始时间以会员添加时间为开始,这样登录的时候需要判断帐号是否过期,原本的织梦系统中是通过$rs = $cfg_ml->CheckUser($userid,$pwd);来检查帐号信息的:
if($rs==0)
{
ResetVdValue();
ShowMsg("用户名不存在!", "index.php", 0, 2000);
exit();
}
else if($rs==-1) {
ResetVdValue();
ShowMsg("密码错误!", "index.php", 0, 2000);
exit();
}
else if($rs==-2) {
ResetVdValue();
ShowMsg("管理员帐号不允许从前台登录!", "index.php", 0, 2000);
exit();
}
else
{
//当$rs=1时会员帐号登录,但是一开始我对织梦的代码不是特别的熟悉,于是我是想着在这里判断帐号有没有过期,过期则提示会员帐号过期,联系管理员,但是测试的时候发现会提示会员帐号过期,但是同时过期的帐号还是会登录,后来我明白了其实在最上面检查帐号时,只要$rs=1时其实帐号就已经登录了,所以过期账号在下面这块判断是没有用的,必须在检查账号的那里判断;
// 清除会员缓存
$cfg_ml->DelCache($cfg_ml->M_ID);
if(empty($gourl) || preg_match("#action|_do#i", $gourl))
{
ShowMsg("成功登录,5秒钟后转向系统主页...","index.php",0,2000);
}
else
{
$gourl = str_replace('^','&',$gourl);
ShowMsg("成功登录,现在转向指定页面...",$gourl,0,2000);
}
exit();
}
分析过后的会员过期帐号不让登录的代码:
if($pwd=='')
{
ResetVdValue();
ShowMsg("密码不能为空!","-1",0,2000);
exit();
}
//判断帐号是否过期
$loginip = GetIP();
$arr=$dsql->GetOne("SELECT `exptime`,`jointime`,`loginip` FROM `#@__member` WHERE `userid` = '$userid' and `pwd`=md5($pwd) ");
$now=(time()-$arr['jointime'])/(24*3600);
if(!$arr){
ShowMsg("你输入的用户名和密码错误","-1",0,2000);
}else{
if($now<=$arr['exptime']){
$rs = $cfg_ml->CheckUser($userid,$pwd);
}else{
ShowMsg("登录失败,帐号过期,请联系管理员",'-1',0,2000);
exit();
}
}
在会员登录时还需要实现一个帐号不能再不同ip下登录;
if($rs==0)
{
ResetVdValue();
ShowMsg("用户名不存在!", "index.php", 0, 2000);
exit();
}
else if($rs==-1) {
ResetVdValue();
ShowMsg("密码错误!", "index.php", 0, 2000);
exit();
}
else if($rs==-2) {
ResetVdValue();
ShowMsg("管理员帐号不允许从前台登录!", "index.php", 0, 2000);
exit();
}
else
{
// 判断帐号是否登陆
$cfg_ml->DelCache($cfg_ml->M_ID);
if(empty($gourl) || preg_match("#action|_do#i", $gourl))
{
ShowMsg("成功登录,5秒钟后转向系统主页...","index.php",0,2000);
}
else
{
$gourl = str_replace('^','&',$gourl);
ShowMsg("成功登录,现在转向指定页面...",$gourl,0,2000);
}
$loginip = GetIP();
@session_start();//启动session
$_SESSION['userid'] = $userid;
$dsql->ExecuteNoneQuery("UPDATE @__member SET `login`='$loginip' WHERE `userid`='$userid'");
exit();
}
}
dedecms--二次开发之会员帐号过期无法登录的更多相关文章
- 技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!
技术要点: Application 全局变量的使用 hashtable 的使用 Session 对应唯一sessionID 标志会话状态 webpage 继承 BasePage的技术 整体比较简单,主 ...
- Python爬虫获取迅雷会员帐号
代码如下: import re import urllib.request import urllib import time from collections import deque head = ...
- dedecms二次开发
安装遇到的问题 修改文件如下 1.date目录下的config.cache.bak.php改成config.cache.php 2install目录下的index.html.install_lock. ...
- Ubuntu 14.04 为 root 帐号开启 SSH 登录
1. 修改 root 密码 sudo passwd root 2. 以其他账户登录,通过 sudo nano 修改 /etc/ssh/sshd_config : xxx@ubuntu14:~$ su ...
- Ubuntu 16.04 为 root 帐号开启 SSH 登录
1.先用普通账号登录 2.安装 open ssh: sudo apt-get install openssh-server 3.修改密码: sudo passwd root 4.切换到root账户 s ...
- Ubuntu 为 root 帐号开启 SSH 登录
1. 修改 root 密码sudo passwd root 2. 以其他账户登录,通过 sudo nano 修改 /etc/ssh/sshd_config :xxx@ubuntu:~$ su - ro ...
- dedecms--二次开发文章内容页未登录禁止访问和同一个帐号只允许一个ip登录
最近在用dedecms二次开发会员功能,领导要求,会员未登录不允许访问文章内容页,和同一个账号只允许一个ip登录,我是将这两个在一起判断的,判断session存不存在,不存在的情况下就是未登录,这时候 ...
- 最好最实用的PHP二次开发教程
◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术 ...
- 申请LINE 帐号的所有方法
如果你打算用LINE 交朋友或是做行销,你就必须先要拥有一个甚至许多个LINE 帐号.在本篇文章中,将分享给你目前申请LINE 帐号的所有可能方法. 目前LINE 公司允许大家使用以下二种身分申请LI ...
随机推荐
- STL之stack操作
c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...
- mongo 副本集+分片 配置
服务器规划如下: 副本集名称|服务器IP 192.168.56.111 192.168.56.112 192.168.56.113 shard1 3201 3201 3201 shard2 3202 ...
- Linux下配置Django_Apache_Mysql环境(CentOS 7.5)
本文将介绍如何在Linux上部署Django + Mysql + Apache环境.我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户 ...
- 在spring boot中使用webSocket组件(一)
最近在项目中使用到了spring的webSocket组件,在这里和大家分享下,如有错误,欢迎大家指正. 在这里我使用的IDE工具是Intellij idea,框架是spring boot.spring ...
- Linux学习-函式库管理
动态与静态函式库 首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展 ...
- bash循环for/while/until
shell流程控制之一:for循环 for VAR in LIST; do STATEMENT1 ... done 例: ...
- C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多 ...
- 算法学习记录-查找——折半查找(Binary Search)
以前有个游戏,一方写一个数字,另一方猜这个数字.比如0-100内一个数字,看谁猜中用的次数少. 这个里面用折半思想猜会大大减少次数. 步骤:(加入数字为9) 1.因为数字的范围是0-100,所以第一次 ...
- loj2031 「SDOI2016」数字配对
跑最大费用最大流,注意到每次 spfa 出来的 cost 一定是越来越少的,啥时小于 \(0\) 了就停了吧. #include <iostream> #include <cstri ...
- C++ 指针的小知识
看个小例子: char* fun1(){ char * p = (char*)malloc(100); p = "helloww"; return p;} void fun2(ch ...