xml地图|网站地图|网站标签 [设为首页] [加入收藏]

正规赌博平台

当前位置:网上十大正规赌博平台 > 正规赌博平台 > 利用php实现一周之内自动登录存储机制,自己动

利用php实现一周之内自动登录存储机制,自己动

来源:http://www.nb-machinery.com 作者:网上十大正规赌博平台 时间:2019-07-11 08:48

PHP print_r方法可以把变量打印显示,使变量易于理解。如果变量是string,integer或float,将打印变量值本身,如果变量是array,将会按照一定格式显示键和元素。object与数组类似。print_r用于打印数组较多。

cookie、session、localStorage这三个应该是最让程序员头疼的了,我利用简单的登录界面的username和password来说明一下吧.

    上接《自己动手写C语言格式化输出函数(一)》 。 

php原生没有把print_r方法打印后的数据还原为原始数组,因此写了下面这个方法,实现将print_r处理后的数据还原为原始数组。

1.cookie用来存储用户相关数据,存储的位置在用户本地:

    三、格式化字符及字符串。

RestorePrint.class.php

首先是登录界面定义:

 1 // 宽字符串转换ANSI字符串。参数:ANSI字符串,宽字符串,转换字符数(0不转换)。
 2 // 返回实际转换字符个数
 3 static INT WStrToStr(LPSTR dst, LPCWSTR src, INT count)
 4 {
 5     return WideCharToMultiByte(CP_THREAD_ACP, 0, src, -1,
 6         dst, count > 0? count   1: 0, NULL, NULL) - 1;
 7 }
 8 
 9 // 格式化字符。参数:缓冲区,格式记录。返回缓冲区尾偏移
10 static LPSTR FormatCharA(LPSTR buffer, FormatRec *rec)
11 {
12     INT len, spaces;
13     LPSTR p = buffer;
14 
15     if (rec->type == TYPE_LONG)
16     {
17         len = WStrToStr(NULL, (LPCWSTR)rec->param, 0);
18         if (len == 0) len = sizeof(CHAR);
19     }
20     else len = sizeof(CHAR);
21     spaces = rec->width - len;
22     if (rec->left == FALSE && spaces > 0)
23     {
24         memset(p, CHAR_SPACE, spaces);
25         p  = spaces;
26     }
27     if (rec->type == TYPE_LONG)
28     {
29         WStrToStr(p, (LPCWSTR)rec->param, len);
30         p  = len;
31     }
32     else *p   = *(LPCSTR)rec->param;
33     if (rec->left == TRUE && spaces > 0)
34     {
35         memset(p, CHAR_SPACE, spaces);
36         p  = spaces;
37     }
38     rec->param  = rec->type == TYPE_LONG? TS_WCHAR : TS_CHAR;
39     return p;
40 }
41 
42 // 格式化字符串。参数:缓冲区,格式记录。返回缓冲区尾偏移
43 static LPSTR FormatStrA(LPSTR buffer, FormatRec *rec)
44 {
45     INT len, spaces;
46     LPSTR p = buffer;
47 
48     if (rec->type == TYPE_LONG)
49         len = WStrToStr(NULL, *(LPCWSTR*)rec->param, 0);
50     else
51         len = lstrlenA(*(LPCSTR*)rec->param);
52     if (rec->precision >= 0 && len > rec->precision)
53         len = rec->precision;
54     spaces = rec->width - len;
55     if (rec->left == FALSE && spaces > 0)
56     {
57         memset(p, CHAR_SPACE, spaces);
58         p  = spaces;
59     }
60     if (rec->type == TYPE_LONG)
61         WStrToStr(p, *(LPCWSTR*)rec->param, len);
62     else
63         memcpy(p, *(LPCSTR*)rec->param, len);
64     p  = len;
65     if (rec->left == TRUE && spaces > 0)
66     {
67         memset(p, CHAR_SPACE, spaces);
68         p  = spaces;
69     }
70     rec->param  = TS_PTR;
71     return p;
72 }

<?php
/**
 * 将print_r处理后的数据还原为原始数组
 * Date:  2016-10-31
 * Author: fdipzone
 * Ver:   1.0
 */
class RestorePrint{ // class start

  public $res = array();
  protected $dict = array();
  protected $buf = '';
  protected $keyname = '';
  protected $stack = array();

  public function __construct() {
    $this->stack[] =& $this->res;
  }

  public function __call($method, $param){
    echo $this->buf .' not defined mehtod:'.$method. ' param:'.implode(',', $param);
  }

  public function set($word, $value=''){
    if(is_array($word)){
      foreach($word as $k=>$v){
        $this->set($k, $v);
      }
    }
    $p =& $this->dict;
    foreach(str_split($word) as $ch){
      if(!isset($p[$ch])){
        $p[$ch] = array();
      }
      $p =& $p[$ch];
    }
    $p['val'] = $value;
    return $this;
  }

  public function parse($str){
    $this->doc = $str;
    $this->len = strlen($str);
    $i = 0;
    while($i < $this->len){
      $t = $this->find($this->dict, $i);
      if($t){
        $i = $t;
        $this->buf = '';
      }else{
        $this->buf .= $this->doc{$i  };
      }
    }
  }

  protected function find(&$p, $i){
    if($i >= $this->len){
      return $i;
    }
    $t = 0;
    $n = $this->doc{$i};
    if(isset($p[$n])){
      $t = $this->find($p[$n], $i 1);
    }
    if($t){
      return $t;
    }
    if(isset($p['val'])){
      $arr = explode(',', $p['val']);
      call_user_func_array(array($this, array_shift($arr)), $arr);
      return $i;
    }
    return $t;
  }

  protected function group(){
    if(!$this->keyname){
      return ;
    }
    $cnt = count($this->stack)-1;
    $this->stack[$cnt][$this->keyname] = array();
    $this->stack[] =& $this->stack[$cnt][$this->keyname];
    $this->keyname = '';
  }

  protected function brackets($c){
    $cnt = count($this->stack)-1;
    switch($c){
      case ')':
        if($this->keyname){
          $this->stack[$cnt][$this->keyname] = trim($this->buf);
        }
        $this->keyname = '';
        array_pop($this->stack);
        break;

      case '[':
        if($this->keyname){
          $this->stack[$cnt][$this->keyname] = trim($this->buf);
        }
        break;

      case ']':
        $this->keyname = $this->buf;
        break;
    }
    $this->buf = '';
  }

} // class end
?>
<form action="server.php" method="post"> 
        <input type="text" name="username" class="username" placeholder="Username"> 
        <input type="password" name="password" class="password" placeholder="Password"> 
        <button type="submit">Sign me in</button> 
        <div class="error"> </div> 
      </form> 

    如果不涉及宽字符,格式化字符和字符串是很简单的。

demo.php

上面的代码大家都懂吧,就是一个表单.然后就是action的server.php服务器处理,

    对于字符和字符串,"%lc"和"%ls"表示宽字符和宽字符串,其它类型精度全部视为默认值,即ANSI字符和ANSI字符串。

<?php
require 'RestorePrint.class.php';

$print_r_data = <<<TXT
Array
(
  [name] => fdipzone
  [gender] => male
  [age] => 18
  [profession] => programmer
  [detail] => Array(
    [grade] => 1
    [addtime] => 2016-10-31
  )
)
TXT;

// 显示打印的数据
echo '显示打印的数据<br>';
echo '<pre>'.$print_r_data.'</pre>';

$oRestorePrint = new RestorePrint;
$oRestorePrint->set('Array', 'group');
$oRestorePrint->set(' [', 'brackets,[');
$oRestorePrint->set('] => ', 'brackets,]');
$oRestorePrint->set(')', 'brackets,)');

$oRestorePrint->parse($print_r_data);
$result = $oRestorePrint->res;

echo '还原为数组<br>';
var_dump($result);

?>
<?php 
/** 
 * Created by PhpStorm. 
 * User: Administrator 
 * Date: 2016-7-19 
 * Time: 11:50 
 */ 
include "data.php"; 
header("Content-type:text/html;charset=utf-8"); 
//echo "ddd"; 
if ($_SERVER["REQUEST_METHOD"] == "POST") {//第一步 
//  echo "ddd1"; 
  if ($_POST["username"] == $info["username"] && $_POST["password"] == $info["password"]) {//第二步 
    $myArr = $_POST; 
    $myArr = array_merge($myArr, array("loginIP" => $_SERVER["REMOTE_ADDR"], "loginTime" => time())); 
    se($myArr); 
    setcookies($_POST["username"], $_POST["password"]); 
    setStroage($_POST["username"], $_POST["password"]); 
    echo "<script> 
   window.location.href='index.php'; 
  </script>"; 
  } 
} else { 
  echo "<script> 
alert('请登录'); 
window.location.href='login.html'; 
</script>"; 
} 
//通过session保存到服务器 
function se(array $arr) 
{ 
  session_start(); 
  $_SESSION["username"] = $arr["username"]; 
  $_SESSION["password"] = $arr["password"]; 
  $_SESSION["loginIP"] = $arr["loginIP"]; 
  $_SESSION["loginTime"] = $arr["loginTime"]; 
} 
//通过cookie保存到本地 
function setCookies($username, $password) 
{ 
  setcookie("username", $username, time()   120); 
  setcookie("password", $password, time()   120); 
} 

//echo "<script> 
// 
//  localStorage.setItem('username','$username'); 
//localStorage.setItem('password'," . "'" . $password . "'" . "); 
//</script>"; 
function setStroage($username, $password){ 
  echo "<script> 
  localStorage.setItem('username'," . "'" . $username . "'" . "); 
  localStorage.setItem('password'," . "'" . $password . "'" . "); 
  </script>"; 
} 

    宽字符的转换是由WStrToStr函数来完成的,而WStrToStr又是调用的Windows API函数WideCharToMultiByte,

输出:

上面加载了一个data.php其实里面就是一条数据,

    在格式化字符0时,C语言的printf和sprintf有所不同,前者是用空格替代的。例如:printf("%s

本文由网上十大正规赌博平台发布于正规赌博平台,转载请注明出处:利用php实现一周之内自动登录存储机制,自己动

关键词: pt电子游艺

上一篇:没有了

下一篇:没有了