将onethink和phpwind数据库安装在一起。使用公用表前缀。

将onethink的member表点phpwind有user表

这是onethink在根文件夹的安装,phpwind安装在bbs的情况下的文件夹

改动onethink中的is_login函数

function is_login(){
$site=include('./bbs/data/cache/config.php');
C('BBS_SITE_SET',$site['data']['site']);
if (!($userCookie = \Org\util\Pw::getCookie('winduser'))) {
return 0;
} else {
list($uid, $password) = explode("\t", \Org\util\Pw::decrypt($userCookie));
$user_session = session('user_auth');
if (empty($user_session)||$user_session['uid']!=$uid) {
//$user = new User\Api\UserApi();
//$info = $user->info($uid); /* 记录登录SESSION和COOKIES */
$auth = array(
'uid' => $uid,
'username' => get_username($uid),
'last_login_time' => NOW_TIME,
);
session('user_auth', $auth);
session('user_auth_sign', data_auth_sign($auth));
}
return $uid;
}
/*
$user = session('user_auth');
if (empty($user)) {
return 0;
} else {
return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
}
*/
}

think库中加入Org/util/pw.class.php和Org/WindCookie.class.php

1.WindCookie.class.php

<?php
namespace Org; /**
* cookie操作类
*
* 使用的时候所有採用静态的方式使用该类中的所有方法:
* <code>
* Wind::import('WIND:http.cookie.WindCookie');
* WindCookie::set('name', 'test');
* </code>
*
* @author Qian Su <aoxue.1988.su.qian@163.com>
* @copyright ©2003-2103 phpwind.com
* @license http://www.windframework.com
* @version $Id: WindCookie.php 3760 2012-10-11 08:02:25Z yishuo $
* @package http
* @subpackage cookie
*/ class WindCookie { /**
* 设置cookie
*
* @param string $name cookie名称
* @param string $value cookie值,默觉得null
* @param boolean $encode 是否使用 MIME base64 对数据进行编码,默认是false即不进行编码
* @param string|int $expires 过期时间,默觉得null即会话cookie,随着会话结束将会销毁
* @param string $path cookie保存的路径,默觉得null即採用默认
* @param string $domain cookie所属域,默觉得null即不设置
* @param boolean $secure 是否安全连接,默觉得false即不採用安全链接
* @param boolean $httponly 是否可通过client脚本訪问,默觉得false即client脚本能够訪问cookie
* @return boolean 设置成功返回true,失败返回false
*/ public static function set($name, $value = null, $encode = false, $expires = null, $path = null, $domain = null, $secure = false, $httponly = false) { if (empty($name)) return false; $encode && $value && $value = base64_encode($value); $path = $path ? $path : '/'; setcookie($name, $value, $expires, $path, $domain, $secure, $httponly); return true; } /**
* 依据cookie的名字删除cookie
*
* @param string $name cookie名称
* @return boolean 删除成功返回true
*/ public static function delete($name) { if (self::exist($name)) { self::set($name, ''); unset($_COOKIE[$name]); } return true; } /**
* 取得指定名称的cookie值
*
* @param string $name cookie名称
* @param boolean $dencode 是否对cookie值进行过解码,默觉得false即不用解码
* @return mixed 获取成功将返回保存的cookie值,获取失败将返回false
*/ public static function get($name, $dencode = false) { if (self::exist($name)) { $value = $_COOKIE[$name]; $value && $dencode && $value = base64_decode($value); return $value ? $value : $value; } return false; } /**
* 移除所有cookie
*
* @return boolean 移除成功将返回true
*/ public static function deleteAll() { $_COOKIE = array(); return true; } /**
* 推断cookie是否存在
*
* @param string $name cookie名称
* @return boolean 假设不存在则返回false,否则返回true
*/ public static function exist($name) { return isset($_COOKIE[$name]); } }

2.pw.class.php

<?php
namespace Org\util;
use Org\WindCookie;
/**
* 工具类库
*
* @author Jianmin Chen <sky_hold@163.com>
* @copyright ©2003-2103 phpwind.com
* @license http://www.phpwind.com
* @version $Id: Pw.php 28776 2013-05-23 08:46:10Z jieyin $
* @package library
*/
class Pw {
/**
* 取得指定名称的cookie值
*
* @param string $name cookie名称
* @param string $pre cookie前缀,默觉得null即没有前缀
* @return boolean
*/
public static function getCookie($name) {
$site = C('BBS_SITE_SET');
$pre = $site['cookie.pre'];
$pre && $name = $pre . '_' . $name;
return WindCookie::get($name);
} /**
* 设置cookie
*
* @param string $name cookie名称
* @param string $value cookie值,默觉得null
* @param string|int $expires 过期时间,默觉得null即会话cookie,随着会话结束将会销毁
* @param string $pre cookie前缀,默觉得null即没有前缀
* @param boolean $httponly
* @return boolean
*/
public static function setCookie($name, $value = null, $expires = null, $httponly = false) {
$path = $domain = null;
$site = C('BBS_SITE_SET');
$pre = $site['cookie.pre'];
$pre && $name = $pre . '_' . $name;
$expires && $expires += time();
return WindCookie::set($name, $value, false, $expires, $path, $domain, false, $httponly);
} /**
* 加密方法
*
* @param string $str
* @param string $key
* @return string
*/
public static function encrypt($str, $key = '') {
$site = C('BBS_SITE_SET');
$key || $key = $site['hash'];
return base64_encode(self::iencrypt($str, $key));
} /**
* 解密方法
*
* @param string $str
* @param string $key
* @return string
*/
public static function decrypt($str, $key = '') {
$site = C('BBS_SITE_SET');
$key || $key = $site['hash'];
return self::idecrypt(base64_decode($str), $key);
} /**
* password加密存储
*
* @param string $pwd
* @return string
*/
public static function getPwdCode($pwd) {
$site = C('BBS_SITE_SET');
return md5($pwd . $site['hash']);
} public function iencrypt($str, $key) {
if ($str == '') return '';
if (!$key || !is_string($key)) {
return '';
}
$v = self::str2long($str, true);
$k = self::str2long($key, false);
if (count($k) < 4) {
for ($i = count($k); $i < 4; $i++) {
$k[$i] = 0;
}
}
$n = count($v) - 1; $z = $v[$n];
$y = $v[0];
$delta = 0x9E3779B9;
$q = floor(6 + 52 / ($n + 1));
$sum = 0;
while (0 < $q--) {
$sum = self::int32($sum + $delta);
$e = $sum >> 2 & 3;
for ($p = 0; $p < $n; $p++) {
$y = $v[$p + 1];
$mx = self::int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self::int32(
($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$z = $v[$p] = self::int32($v[$p] + $mx);
}
$y = $v[0];
$mx = self::int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self::int32(
($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$z = $v[$n] = self::int32($v[$n] + $mx);
}
return self::long2str($v, false);
} /* (non-PHPdoc)
* @see IWindSecurity::decrypt()
*/
public function idecrypt($str, $key) {
if ($str == '') return '';
if (!$key || !is_string($key)) {
return '';
}
$v = self::str2long($str, false);
$k = self::str2long($key, false);
if (count($k) < 4) {
for ($i = count($k); $i < 4; $i++) {
$k[$i] = 0;
}
}
$n = count($v) - 1; $z = $v[$n];
$y = $v[0];
$delta = 0x9E3779B9;
$q = floor(6 + 52 / ($n + 1));
$sum = self::int32($q * $delta);
while ($sum != 0) {
$e = $sum >> 2 & 3;
for ($p = $n; $p > 0; $p--) {
$z = $v[$p - 1];
$mx = self::int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self::int32(
($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$y = $v[$p] = self::int32($v[$p] - $mx);
}
$z = $v[$n];
$mx = self::int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self::int32(
($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
$y = $v[0] = self::int32($v[0] - $mx);
$sum = self::int32($sum - $delta);
}
return self::long2str($v, true);
} /**
* 长整型转换为字符串
*
* @param long $v
* @param boolean $w
* @return string
*/
private function long2str($v, $w) {
$len = count($v);
$s = array();
for ($i = 0; $i < $len; $i++)
$s[$i] = pack("V", $v[$i]);
return $w ? substr(join('', $s), 0, $v[$len - 1]) : join('', $s);
} /**
* 字符串转化为长整型
*
* @param string $s
* @param boolean $w
* @return Ambigous <multitype:, number>
*/
private function str2long($s, $w) {
$v = unpack("V*", $s . str_repeat("\0", (4 - strlen($s) % 4) & 3));
$v = array_values($v);
if ($w) $v[count($v)] = strlen($s);
return $v;
} /**
* @param int $n
* @return number
*/
private function int32($n) {
while ($n >= 2147483648)
$n -= 4294967296;
while ($n <= -2147483649)
$n += 4294967296;
return (int) $n;
} }

onethink中间user模块的相应变化

版权声明:本文博客原创文章,博客,未经同意,不得转载。

onethink和phpwind共享的更多相关文章

  1. 伪共享(false sharing),并发编程无声的性能杀手

    在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素.前段时间学习了一个牛X的高性能异步处理框架 Disruptor ...

  2. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  3. iOS开发之App间账号共享与SDK封装

    上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...

  4. 当web.config文件放置在共享目录下(UNC),启动IIS会提示有错误信息500.19,伴随有错误代码0x80070003和错误代码0x80070005的解决办法

    最近遇到一个很有意思的使用环境,操作人员将所有的网站应用内容投放到共享存储里面,并且使用微软的SMB协议将其以CIFS的方式共享出来,使用Windows Server 2008 R2的IIS将其连接起 ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. Openfiler配置RAC共享存储

    将 Openfiler 用作 iSCSI 存储服务器,主要操作步骤如下: 1.设置 iSCSI 服务 2.配置网络访问 3.指定物理存储器并对其分区 4.创建新的卷组 5.创建所有逻辑卷 6.为每个逻 ...

  7. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  8. 茂名石化BPM应用实践 ——业务协同及服务共享平台建设和应用

    一.茂名石化简介 茂名石化隶属于中国石油化工集团公司,创建于1955年,是国家"一五"期间156项重点项目之一.经过50多年的发展,茂名石化已成为我国生产规模最大的炼油化工企业之一 ...

  9. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

随机推荐

  1. duilib底层机制剖析:窗口类与窗口句柄的关联

    转载请说明原出处.谢谢~~ 看到群里朋友有人讨论WTL中的thunk技术,让我联想到了duilib的类似技术. 这些技术都是为了解决c++封装的窗口类与窗口句柄的关联问题. 这里是三篇关于thunk技 ...

  2. java中线程机制

    java中线程机制,一开始我们都用的单线程.现在接触到多线程了. 多线性首先要解决的问题是:创建线程,怎么创建线程的问题: 1.线程的创建: 四种常用的实现方法 1.继承Thread. Thread是 ...

  3. JS验证姓名、邮箱、电话号码

    <SCRIPTtype="text/javascript"> varredflag=0; //姓名验证 functionisName(){ varname=$('#na ...

  4. android app崩溃日志收集以及上传

    源代码获取请到github:https://github.com/DrJia/AndroidLogCollector 已经做成sdk的形式,源代码已公开,源代码看不懂的请自行google. 假设想定制 ...

  5. HDU2586 How far away ?(LCA模板题)

    题目链接:传送门 题意: 给定一棵树,求两个点之间的距离. 分析: LCA 的模板题目 ans = dis[u]+dis[v] - 2*dis[lca(u,v)]; 在线算法:详细解说 传送门 代码例 ...

  6. spring整合flex

    在常规的开发中只是用flex二不和后台交互是不可能的,为此flex也提供了和后台交互的2种解决方案一种是Data Services另一种是BlazeDs,本篇博客是用的是后一种,我的开发步骤如下: 1 ...

  7. 1104. Don’t Ask Woman about Her Age(数论)

    a*b^n(mod(b-1) =a(mod(b-1) http://acm.timus.ru/problem.aspx?space=1&num=1104 #include <stdio. ...

  8. POJ 3100 &amp; ZOJ 2818 &amp; HDU 2740 Root of the Problem(数学)

    题目链接: POJ:id=3100" style="font-size:18px">http://poj.org/problem? id=3100 ZOJ:http ...

  9. [java面试题]最长的回文字符串中出现确定

    <span style="font-family: Arial, Helvetica, sans-serif;">package com.wzw.util;</s ...

  10. 排列组合相关算法 python

    获取指定长度得全部序列 通过事件来表述这个序列,即n重伯努利实验(二项分布)的全部可能结果.比如时间a表示为: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 假设每次实验为从 ...