一些日常忽略的细节程序设置

news/2024/7/7 19:05:19 标签: python, php, javascript

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、前后台COOKIE设置

前台:

php">$cookie_time = SYS_TIME+86400*30;
if(!$r['lang']) $r['lang'] = 'zh-cn';
if(!isset($cookietime)) {
    $get_cookietime = param::get_cookie('cookietime');
}
$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
$cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;
$phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
$phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', $phpcms_auth_key);
param::set_cookie('auth', $phpcms_auth, $cookietime);
param::set_cookie('_userid', $userid, $cookietime);
param::set_cookie('_username', $username, $cookietime);
param::set_cookie('_groupid', $groupid, $cookietime);
param::set_cookie('_nickname', $nickname, $cookietime);

后台:

php">$_SESSION['userid'] = $r['userid'];
$_SESSION['roleid'] = $r['roleid'];
$_SESSION['pc_hash'] = random(6,'abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789');
$_SESSION['lock_screen'] = 0;
$default_siteid = self::return_siteid();
$cookie_time = SYS_TIME+86400*30;
if(!$r['lang']) $r['lang'] = 'zh-cn';
param::set_cookie('admin_username',$username,$cookie_time);
param::set_cookie('siteid', $default_siteid,$cookie_time);
param::set_cookie('userid', $r['userid'],$cookie_time);
param::set_cookie('admin_email', $r['email'],$cookie_time);
param::set_cookie('sys_lang', $r['lang'],$cookie_time);

二、加解密函数

php">/**
* 字符串加密、解密函数
*
*
* @param	string	$txt		字符串
* @param	string	$operation	ENCODE为加密,DECODE为解密,可选参数,默认为ENCODE,
* @param	string	$key		密钥:数字、字母、下划线
* @param	string	$expiry		过期时间
* @return	string
*/
function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {
	$key_length = 4;
	$key = md5($key != '' ? $key : pc_base::load_config('system', 'auth_key'));
	$fixedkey = md5($key);
	$egiskeys = md5(substr($fixedkey, 16, 16));
	$runtokey = $key_length ? ($operation == 'ENCODE' ? substr(md5(microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
	$keys = md5(substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));
	$string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));

	$i = 0; $result = '';
	$string_length = strlen($string);
	for ($i = 0; $i < $string_length; $i++){
		$result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
	}
	if($operation == 'ENCODE') {
		return $runtokey . str_replace('=', '', base64_encode($result));
	} else {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$egiskeys), 0, 16)) {
			return substr($result, 26);
		} else {
			return '';
		}
	}
}

三、COOKIE设置

php">/**
	 * 设置 cookie
	 * @param string $var     变量名
	 * @param string $value   变量值
	 * @param int $time    过期时间
	 */
	public static function set_cookie($var, $value = '', $time = 0) {
		$time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
		$s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
		$var = pc_base::load_config('system','cookie_pre').$var;
		$_COOKIE[$var] = $value;
		if (is_array($value)) {
			foreach($value as $k=>$v) {
				setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s);
			}
		} else {
			setcookie($var, sys_auth($value, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s);
		}
	}

	/**
	 * 获取通过 set_cookie 设置的 cookie 变量 
	 * @param string $var 变量名
	 * @param string $default 默认值 
	 * @return mixed 成功则返回cookie 值,否则返回 false
	 */
	public static function get_cookie($var, $default = '') {
		$var = pc_base::load_config('system','cookie_pre').$var;
		$value = isset($_COOKIE[$var]) ? sys_auth($_COOKIE[$var], 'DECODE') : $default;
		if(in_array($var,array('_userid','siteid'))) {
			$value = intval($value);
		} elseif($var=='_usename') {
			$value = safe_replace($value);
		}
		return $value;
	}


四、配置文件

php">//Session配置
'session_storage' => 'mysql',
'session_ttl' => 1800,
'session_savepath' => CACHE_PATH.'sessions/',
'session_n' => 0,
//Cookie配置
'cookie_domain' => '', //Cookie 作用域
'cookie_path' => '', //Cookie 作用路径
'cookie_pre' => 'rUtRR_', //Cookie 前缀,同一域名下安装多套系统时,请修改Cookie前缀
'cookie_ttl' => 0, //Cookie 生命周期,0 表示随浏览器进程

五、SESSION设置

PHPCMS的session应用前都必须加这个才能使用

php">$session_storage = 'session_'.pc_base::load_config('system','session_storage');
pc_base::load_sys_class($session_storage);


六、检测是否登录

后台:

php">/**
	 * 判断用户是否已经登陆
	 */
	final public function check_admin() {
		if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'public_card'))) {
			return true;
		} else {
			$userid = param::get_cookie('userid');
			if(!isset($_SESSION['userid']) || !isset($_SESSION['roleid']) || !$_SESSION['userid'] || !$_SESSION['roleid'] || $userid != $_SESSION['userid']) showmessage(L('admin_login'),'?m=admin&c=index&a=login');
		}
	}



后台退出登陆:

php">public function public_logout() {
		$_SESSION['userid'] = 0;
		$_SESSION['roleid'] = 0;
		param::set_cookie('admin_username','');
		param::set_cookie('userid',0);
		
		//退出phpsso
		$phpsso_api_url = pc_base::load_config('system', 'phpsso_api_url');
		$phpsso_logout = '<script type="text/javascript" src="'.$phpsso_api_url.'/api.php?op=logout" reload="1"></script>';
		
		showmessage(L('logout_success').$phpsso_logout,'?m=admin&c=index&a=login');
}



前台检测是否登录:

php">$phpcms_auth = param::get_cookie('auth');
//判断是否存在auth cookie
if ($phpcms_auth) {
	$auth_key = $auth_key = md5(pc_base::load_config('system', 'auth_key').$_SERVER['HTTP_USER_AGENT']);
	list($userid, $password) = explode("\t", sys_auth($phpcms_auth, 'DECODE', $auth_key));



前侧退出登陆:

php">param::set_cookie('auth', '');
param::set_cookie('_userid', '');
param::set_cookie('_username', '');
param::set_cookie('_groupid', '');
param::set_cookie('_nickname', '');
param::set_cookie('cookietime', '');



转载于:https://my.oschina.net/u/1186749/blog/616635


http://www.niftyadmin.cn/n/1152332.html

相关文章

在使用JPA进行数据库操作时,插入中文报错

文章目录问题描述原因解决办法问题描述 在学习JPA的使用时&#xff0c;我使用 save() 方法去更新表和插入新的记录&#xff1b; 当我数据中含有中文时&#xff0c;会报错 当我数据中没有中文时&#xff0c;正常使用 原因 数据库的字符编码问题&#xff0c; 我使用的mysql数据…

Mybatis-Redis二级缓存分布式实现

Mybatis二级缓存默认采用的org.apache.ibatis.cache.impl.PerpetualCache实现的&#xff08;基于内存中Map<Object, Object> cache&#xff09;&#xff0c;在项目进行分布式部署时&#xff0c;无法保证多实例间的分布式缓存一致性&#xff0c;故需要对该Cache实现进行修…

.NET/Mysql-petatoco连接mysql数据库

安装mysql数据库 用nugget添加.net连接mysql数据库的组件

java面向对象技术的学习笔记

文章目录面向对象与面向过程不同点面向对象的特征面向对象的开发优点重载&#xff08;overload&#xff09;和覆盖&#xff08;override&#xff09;重载注意项覆盖注意项重载与覆盖的区别抽象类与接口相同点不同点内部类获取父类的类名final、finally和finalize的区别finalfin…

Docker制作Redis镜像(基于Docker官方Redis镜像+Dockerfile)

DockerHub官方Redis镜像&#xff1a;https://hub.docker.com/_/redis 使用说明&#xff08;截图&#xff09;如下&#xff1a; 构建过程&#xff1a; &#xff08;1&#xff09;自定义redis.conf&#xff1b; 参照官方redis.conf&#xff0c;具体修改如下&#xff1a; &…

提升——树形DP

这里讲提高一点的内容&#xff0c;所以没有树形DP基础的&#xff0c;先看一下基础部分&#xff1a; 浅说——树形DP 闲言不表&#xff0c;看第一题。 这道题是典型的树上最长链问题。&#xff08;就是一个模板题&#xff09; 给定一棵树&#xff0c;树上共有N个节点(N<5000)…

Tkinter 控件详细介绍

Tkinter 控件详细介绍 1.Button 按钮。类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作/事件 2.Canvas 画布。提供绘图功能(直线、椭圆、多边形、矩形) ;可以包含图形或位图 3.Checkbutton 选择按钮。一组方框,可以选择其中的任意个(类似 HTML 中的 checkbox…

Java字符串与数组的学习笔记

文章目录字符串创建和存储的机制""、equals和hashCode有什么区别String、StringBuffer、StringBuilder和StringTokenizer数组length属性与length()方法字符串 创建和存储的机制 String 的实现采用了Flyweight 的设计模式 当执行 String "abc"时&#xf…