转:Sina OAuth request_token 如何存储

 更新时间:2016年11月25日 15:50  点击:1778
文章介绍了关于Sina OAuth request_token 如何存储,有需要了解的同学可参考一下。

资源如下:

  1. jquery1342660045312="31">新浪的OAuth API地址
  2. 新浪微博开放平台OAuth授权解决方案(含代码

纠结的问题在于此:

  1. 新浪使用的是OAuth 1.0 ,在用户授权验证前,需要先生成request_token
  2. request_token 应该如何存储?
  3. SDK中的建议是存储在SESSION中,但是如果我有多台前端机,DNS解析又是不靠谱的,那么我的多台机器如何同步SESSION?
  4. SESSION存储在数据库中可以避免此问题,可是问题是我的业务不需要用到数据库,为了存储临时性的一次SESSION而用库,太不划算。
  5. 存储到COOKIE中,多台前端机的问题就不用关心了,不过是否会有不安全因素呢?
  6. COOKIE中是否可以存储一个字符串,该串为MEMCACHE的KEY,由MEM来存储这个一次性的request_token 是否可行?
  7. 别人拿到COOKIE,COOKIE可以加一些验证,比如签名之类的东西,并不是随便改造就可以破坏我的程序的。

分析过程大致如上,具体如何实现还在纠结!

这里举一个实现其它的不说多关于php ajax实现验证用户名是否存在完整程序,有需要了解的同学可参考一下。
 代码如下 复制代码

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
 <link rel="stylesheet" type="text/css" href="css/int.css" />
<script type="text/javascript" >
//根据下拉框变换图片
 function img_change(thisObj){
     var imgsrc = "/bbs/img/"+ thisObj.value+".gif";
     document.getElementById("tx_change").src=imgsrc;   
 }
 
 //检查是否都符合 注册 要求
 function check_reg()
 {
 if(check_len() && check_pass() && check_email() && check_qq())
 {
     return true;   
 }else{
     return false;
     }
 }
 
 //检查密码长度不能少于6
 function check_len(thisObj){
     if(thisObj.value.length==0)
     {
         document.getElementById('show_pass').innerHTML="密码不能为空";
         return false;
     }else{
     if (thisObj.value.length<6)
     {
         document.getElementById('show_pass').innerHTML="密码长度不少于6";
         return false;
     }
         document.getElementById('show_pass').innerHTML="";   
         return true;
       }
 }
 
 //检查俩次密码输入是否一致
 function check_pass(thisObj){
     var psw=document.getElementById('pass');
     if(psw.value.length==0)
     {
         document.getElementById('show_pass').innerHTML="密码不能为空";
         return false;
     }else{
         document.getElementById('show_pass').innerHTML="";   
 
     if (thisObj.value!=psw.value)
     {
         document.getElementById('show_repass').innerHTML="两次密码输入不正确";
         return false;
     }
         document.getElementById('show_repass').innerHTML="";
         return true;
     }
 }
 
 //检查email是否正确
 function check_email(thisObj){
     var reg=/^([a-zA-Zd][a-zA-Z0-9_]+@[a-zA-Zd]+(.[a-zA-Zd]+)+)$/gi;   
     var rzt=thisObj.value.match(reg);
     if(thisObj.value.length==0){
         document.getElementById('show_e').innerHTML="Email不能为空";
         return false;
         }else{
     if (rzt==null)
     {
         document.getElementById('show_e').innerHTML="Email地址不正确";
         return false;
     }
         document.getElementById('show_e').innerHTML="";
         return true;
   }
 
 }
 
 //检查qq格式是否正确
 function check_qq(thisObj){
     var qq=document.getElementById('qq').value;
     var reg=/^d+$/;
     if(qq.search(reg))
     {
         document.getElementById('show_qq').innerHTML=" QQ 只能为数字";
         return false;
     }else{
         document.getElementById('show_qq').innerHTML="";
         return true ;
         }
    
    
 }
</script>
 <style type="text/css">
 td{
     height:30px;
     vertical-align:middle;
     align:center;
 }
 #myText{
  width:600px;
 }
 </style>
 <title>注册页面</title>
 </head>
 
 <body >
 
 <?php
 error_reporting(0);
 //不让PHP报告有错语发生。如果不关闭好有类似这的错语 Warning: preg_match() 关闭就不出现了
 session_start();
 header("Cache-control: private");
 
 $conn = @ mysql_connect("localhost","root","")or die("数据库连接错误");
 mysql_select_db("bbs",$conn);
 mysql_query("set names utf8");
 
 if($_POST['submit'])
 {  
     $username = $_POST["username"];
    
     $sql="select userName  from user_info where userName='$username'";
  //   echo $sql;
    
     $query=mysql_query($sql);
     $rows = mysql_num_rows($query);
     if($rows > 0){
          echo "<script type='text/javascript'>alert('用户名已存在');location='javascript:history.back()';</script>";
     }else{
         $user_in = "insert into user_info (username,pass,sex,qq,email,img) values ('$_POST[username]',md5('$_POST[pass]'),'$_POST[sex]','$_POST[qq]','$_POST[email]','$_POST[img_select]')";       
         //echo $user_in;
         mysql_query($user_in);
         echo "<script type='text/javascript'>alert('写入成功!!');location.href='login.php';</script>";
       
     }
 
 //javascript:history.go(-1)
    
 }
 ?>
 
 
 <form  action="reg.php" name="reg_form" method="post" onsubmit="return check_reg()">
 <table name="reg_table" align="left">
 <tr>
     <td>用户:</td><td><input id="username" name="username" class="myText" type="text" maxlength="12" /></td>
 </tr>
 
 <tr> <!--性别:0 保密 1 女 2 男-->
      <td > 性别:</td>
      <td>女<input type="radio" value="1" name="sex"/>
          男<input type="radio" value="2" name="sex" />
        保密<input type="radio" value="0" name="sex"  checked/></td>
 </tr>
 
 <tr>
     <td>密码:</td><td><input name="pass" class="myText" type="password" onblur="check_len(this)"/><span id="show_pass" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td>重复密码:</td><td><input name="repass" class="myText" type="password" onblur="check_pass(this)" /><span id="show_repass" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td>QQ:</td><td><input type="text" class="myText"  name="qq" onblur="check_qq(this)"/><span style="color:red;" id="show_qq"></span></td>
 </tr>
 
 <tr>
     <td>邮箱:</td><td><input type="text" class="myText" name="email"  onblur="check_email(this)"/><span id="show_e" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td height="60">头像:</td>
     <td>
     <select name="img_select" onchange="img_change(this)">
         <option value="101" >女 001</option>
         <option value="102" >女 002</option>
         <option value="103" >女 003</option>
         <option value="104" >女 004</option>
         <option value="105" >男 001</option>
         <option value="106" >男 002</option>
         <option value="107" >男 003</option>
         <option value="108" >男 004</option>
      </select>
      <img src="/bbs/img/101.gif" id="tx_change" style="width:50px; height:65px;" alt=""/>
     </td>
 </tr>
 
 <tr height="20" align="justify">
     <td align="right" ><input type="submit" value="注册" name="submit" style="margin-right:5px;"/></td>
     <td><input type="reset"  value="重置" name="reset" style="margin-left:5px;"/></td>
 </tr>
 
 <tr>
     <td  colspan="2">我已有账号现在<a href="login.php">登录</a></td>
 </tr>
 
 </table>
 </form>
 </body>
 </html>

文章详细的介绍了关于php生成略缩图程序过程与实现方法 ,有需要了解的同学可参考一下下。

12.3  自动微缩图的生成
    由于图片的数据量比较大,传递过程相对较长,所以在用户浏览图片时,常常希望先
显示一个图片的缩略图。
    虽然在HTML中可以通过指定图片的宽度和高度来随意缩放图片,但是这种方法不会
减少图片的像素数目。图形文件的尺寸没有改变,当然也不会加快图片下载的速度了。当
然也可以手动通过图形软件生成图片的缩略图,但对于大量的图片展示来说,这个工作量
将十分巨大。为此微缩图的自动生成程序就被设计出来了。
    PHP中提供的imagecopyresized函数就可以用来生成真正的缩赂图片。该函数的标推
语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,
int srcX,int srcY,int dstW,int dstH,int srcW,int srcH);

  返回值:整数
  函数种类:图形处理
  内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数都是目的在前,来
源在后。参数dst im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,欲调整的新图
的尺寸就在这儿配置。
    下面举个例子来说明这个函数的用法,对应的程序thumb.php如程序清单12—5所示。

  程序清单12—5  thumb.php

 代码如下 复制代码
<?
// 本函数从源文件取出图像,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,png
// 目的文件格式:gif
// $srcFile:源文件
// $dstFile: 目标文件
// $dstW:目标图片宽度
// $dstH:目标文件高度
function makethumb($srcFile,$dstFile,$dstW,$dstH)
{
 $data = GetImageSize($srcFile,&$info);
 switch ($data[2])
 {
  case 1:
   $imgsrc = @ImageCreateFromGIF($srcFile);
   break;
  case 2:
   $imgsrc = @ImageCreateFromJPEG($srcFile);
   break;
  case 3:
   $imgsrc = @ImageCreateFromPNG($srcFile);
   break;
 }
 $srcW = ImageSX($imgsrc);
 $srcH = ImageSY($imgsrc);
 $ni = ImageCreate($dstW,$dstH);
 ImageCopyResized($ni,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
 Imagegif($ni,$dstFile);
 // 如果需要输出到浏览器,那么将上一句改为 ImageJpeg($ni);
 // 如果需要其他格式的图片,改动最后一句就可以了
}
?>

在这个例子中,首先通过getimagesize()函数获得源图片的情况,再用 imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng()创建一个源位图$imgsrc,然后用
imagecreate()函数创建一个目标位图,其长、宽各是源位图的一半。然后调用imagecopyresized()
函数,将源位图缩小后拷贝到目标位图中,最后再用imagegif()函数生成缩略图。
    这里所用到的图形处理函数就是由安装的GD库提供的,现对其分别进行说明。首先
介绍getimagesize()函数,其标准语法如下。
    语法:array getimagesize(string filename,array [imageinfo]);
    返回值:数组
    函数种类:图形处理
    内容说明:本函数可用来取得GIF、JPEG及PNG  3种WWW上图片的高与宽,不
需要安装GD library就可以便用本函数。返回的数组有4个元素,返回数组的第一个元素(索
引值0)是图片的高度,单位是像素(pixel);第二个元素(索引值1)是图片的宽度;第三个元
素(索引值2)是图片的文件格式,其值1为GIF格式、2为JPEG/JPG格式、3为PNG格式;
第四个元素(索引值3)为图片的高与宽字符串,height=xxx width=yyy。
    通过getimagesize()函数的应用,能轻易获取图片的各种信息。下面给大家举一个获取
图片宽度、高度、格式、文件大小的信息的例子,来进一步领会getimagesize()函数的使用
技巧。程序imginfo如程序清单12—6所示。

  程序清单12-6  imginfo.php

 代码如下 复制代码

<?php
function getImageInfo($img) //$img为图像文件绝对路径
{
 $img_info = getimagesize($img);
 switch ($img_info[2])
 {
  case 1:
   $imgtype = "GIF";
   break;
  case 2:
   $imgtype = "JPG";
   break;
  case 3:
   $imgtype = "PNG";
   break;
 }
 $img_type = $imgtype."图像";
 $img_size = ceil(filesize($img)/1000)."k"; //获取文件大小

 $new_img_info = array (
  "width"=>$img_info[0],
  "height"=>$img_info[1],
  "type"=>$img_type,
  "size"=>$img_size
  );
 print " width";
 print $img_info[0];
 print " height";
 print $img_info[1];
 print " format";
 print $img_type;
 print " size";
 print $img_size;
 print $new_img_info;
 }
 
 $img = "/www/htdocs/images/jf.gif";
 getImageInfo($img);
?>

   

在程序12-5中要创建一个缩略图,需要先创建一个用来绘图的空白的画布。
ImageCreate函数可以做到这一点。它将返回一个图像的标识符,并且需要告诉函数用像素
计算的画布有多大(x(宽度)与y(高度))。在程序12-5中用到的图形创建函数imagecreate()
的标准语法如下:
    语法:int imagecreate(int x_size,int y_size);
    返回值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张全空的图形。参数x_size、y_size为图形的尺寸,单位
为像素(pixel)。
 
    如果要从已经存在的图片中取出图片文件代码,可以用imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng(),例如函数imagecreatefromgif()就是从一个GIF
格式的图片文件中取出对应的图片源代码,其标准语法如下:
  语法:int imagecreatefromgif(string filename);
  返回值:整数
  函数种类:图形处理
  内容说明:本函数用来取出一张GIF格式图形,通常作为背景或者基本的画布样本使
用。参数filename可以是本地端的文件,也可以是网络的URL地址。返回值为GIF的文件
代码,可供其他函数使用。
    在将源位图缩小后拷贝到目标位图中时,用到了imagecopyresized()函数,此函数可以
复制新图并调整大小,其标准语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,int srcX,int srcY,
int dstW,int dstH,int srcW,int srcH);
    返回值:整数
    函数种类:图形处理


    内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数那是目的在前,来
源在后。参数ddst_im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,若欲调整新图
的尺寸就在这里配置。
    最后在输出图像时用到的imagegif()函数的标准语法如下:
    语法:int imagegif(int im,string [filename]);
    返问值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张GIF格式图形。参数im为使用ImageCreate()所建立
的图片代码,参数filename可省略,若无本参数filename,则会将图片直接送到浏览器端,
记得在送出图片之前要先送出使用Content-type:image/gif的标头字符串(header)到浏览器
端,以顺利传输图片。若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用
ImageColorTransparent()配置透明背景。本函数产生的GIF图,由于有版权的问题,因此
在商业上的使用还要多加考虑。

 代码如下 复制代码

<?php

 $pic_name=date("dMYHis");

 // 生成图片的宽度
 $pic_width=$_POST['width'];

 // 生成图片的高度
 $pic_height=$_POST['length'];

 function ResizeImage($im,$maxwidth,$maxheight,$name){
  //取得当前图片大小
  $width = imagesx($im);
  $height = imagesy($im);
  //生成缩略图的大小
  if(($width > $maxwidth) || ($height > $maxheight)){
   $widthratio = $maxwidth/$width;  
   $heightratio = $maxheight/$height; 
   if($widthratio < $heightratio){
    $ratio = $widthratio;
   }else{
    $ratio = $heightratio;
   }
   $newwidth = $width * $ratio;
   $newheight = $height * $ratio;
  
   if(function_exists("imagecopyresampled")){
    $newim = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   }else{
    $newim = imagecreate($newwidth, $newheight);
    imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   }
   ImageJpeg ($newim,$name . ".jpg");
   ImageDestroy ($newim);
  }else{
   ImageJpeg ($im,$name . ".jpg");
  }
 }

 if($_FILES['image']['size']){
  //echo $_FILES['image']['type'];
  if($_FILES['image']['type'] == "image/pjpeg"||$_FILES['image']['type'] == "image/jpg"||$_FILES['image']['type'] == "image/jpeg"){
   $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
  }elseif($_FILES['image']['type'] == "image/x-png"){
   $im = imagecreatefrompng($_FILES['image']['tmp_name']);
  }elseif($_FILES['image']['type'] == "image/gif"){
   $im = imagecreatefromgif($_FILES['image']['tmp_name']);
  }
  if($im){
   if(file_exists($pic_name.'.jpg')){
    unlink($pic_name.'.jpg');
   }
   ResizeImage($im,$pic_width,$pic_height,$pic_name);
   ImageDestroy ($im);
  }
 }
?>

<img src="<? echo $pic_name.'.jpg'; ?>"><br><br>
<form enctype="multipart/form-data" method="post" action="small_picture.php">
<br>
<input type="file" name="image" size="50" value="浏览"><p>
生成缩略图宽度:<input type="text" name="width" size="5"><p>
生成缩略图长度:<input type="text" name="length" size="5"><p>
<input type="submit" value="上传图片">
</form>

本文章介绍一个php中Ubb代码编辑器程序代码,大家可参考一下。
 代码如下 复制代码

 

<?php
/*
php Ubb代码编辑器
*/
function get_ubb($ubb){
$ubb=preg_replace("/([B])(.*)([/B])/","<B>2</B>" ,$ubb);//替换B粗体字
$ubb=preg_replace("/([I])(.*)([/I])/","<I>2</I>" ,$ubb);
$ubb=preg_replace("/([U])(.*)([/U])/","<U>2</U>" ,$ubb);
$ubb=preg_replace("/([LEF])(.*)([/LEF])/","<div align=left>2</div>" ,$ubb);
$ubb=preg_replace("/([MID ])(.*)([/MID ])/","<div align=center>2</div>" ,$ubb);
$ubb=preg_replace("/([RIG])(.*)([/RIG])/","<div align=right>2</div>" ,$ubb);
$ubb=preg_replace("/([LINK])(.*)([/LINK])/","<a href=2>2</a>",$ubb);
$ubb=preg_replace("/([Email])(.*)([/Email])/","<a href=mailto:2>2</a>",$ubb);
$ubb=preg_replace("/([IMAGE])(.*)([/IMAGE])/","<img src=2>",$ubb);
$ubb=preg_replace("/([FLASH])(.*)([/FLASH])/","<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=400 height=400><PARAM NAME=movie VALUE="2"><PARAM NAME=quality VALUE=high><embed src="2" quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=400 height=400 ></embed></OBJECT>" ,$ubb);
$ubb=preg_replace("/([MUSIC])(.*)([/MUSIC])/","<embed src=2 autostart=false loop=3>" ,$ubb);
$ubb=preg_replace("/([PHOTO name=)([0-9]*)(])/","<img src=Ubb_img/biaoqing/2.gif >" ,$ubb);
$ubb=preg_replace("/([FONT=)(.{1,10})(])(.*)([/FONT])/","<div style=font:2>4</div>" ,$ubb);
$ubb=preg_replace("/([FONT-SIZE=)([0-9]*)(])(.*)([/FONT-SIZE])/","<div style=font-size:2px>4</div>" ,$ubb);
$ubb=preg_replace("/([FONT-COLOR=)(.{1,10})(])(.*)([/FONT-COLOR])/","<div style=color:2>4</div>" ,$ubb);
//$ubb=preg_replace("/([])(.*)([/])/","" ,$ubb);
return $ubb;
}
$str=get_ubb($_POST['cont']);
$str="<div style=font:宋体>[FONT=黑体]asdasd</div><div style=font:Georgia>asdasdas[/FONT]</div>";
echo get_ubb($str);
?>

汉字正则表达式是大家开发中会碰到的常用见主要是利用\\u4e00-\\u9fa5和来实现正则获取中文汉字了,有需要的同学可以参考一下。

本文章来详细的分析一下关于

 代码如下 复制代码

var reg = /^[u4e00-u9fa5]+$/;

if(reg.test(str))
{
   alert('汉字的干活');
}

$action = trim($_GET['action']);
if($action == "sub")
{
    $str = $_POST['dir'];  
    //if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式
    if(!preg_match("/^[x{4e00}-x{9fa5}A-Za-z0-9_]+$/u",$str))   //UTF-8汉字字母数字下划线正则表达式
    { 
        echo "<font color=red>您输入的[".$str."]含有违法字符</font>"; 
    }
    else
    {
        echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>"; 
    }
}


当然如果要想字符串全是汉字的GBK2312编码匹配为:

 代码如下 复制代码

$str = "小小子";
if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str)){
print($str."确实全是汉字");
} else {
print($str."这个真TMD不全是汉字");
}

其实只要了解了各个编码的高位与低位的开始与结束,那么自然就可以写出正则,而且直接是十六位的,有啥困难?呵呵。不过要注意,在php里面,表示十六位是用的x。
所以如上,我们还可以用该正则表达式来判断是否是GB2312的汉字

 代码如下 复制代码

<?php
$str = "小小子";
if(preg_match("/^[xb0-xf7][xa0-xfe]+$/",$str)){
print($str."确实全是汉字");
} else {
print($str."这个真TMD不全是汉字");
}

?>

在php结合了preg_match("/^[xb0-xf7][xa0-xfe]+$/",$str) 就可以快速的实现了做法,有需要的同学可以参考一下。

[!--infotagslink--]

相关文章