">
当前位置:   article > 正文

PHP 学习筆記[2] —— 自学PHP 笔记整理_站点提示信息the state does not match. you may be a victi

站点提示信息the state does not match. you may be a victim of csrf.

    背景:自学PHP遇到的一些小问题总是很是困扰,不同时间段做一下笔记,方便以后的参考及能力的可视化...


    1.对于数据库操作的代码,可以提取出一个简单的php文件

  1. //设置连接 oracle 数据库的参数
  2. $host = "192.168.11.101";
  3. $port = "1521";
  4. $sid = "orcl";
  5. $sname = "orcl";
  6. $server_name = "orcl";
  7. $db_username = "system";
  8. $db_password = "orcl";
  9. $dbstr =
  10. "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =$host)(PORT = $port))
  11. (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = $server_name)(INSTANCE_NAME = $server_name)))";
  12. $dbconn=oci_connect($db_username,$db_password,$dbstr);//如果去掉最后一个参数或者为“ ”,默认连接本机


    2.注意编码问题

      有时php包含php文件时,发现可能会有编码的问题

    3.json编码,发现对中文的操作不予执行,找到一个解决方法:

    


 

    4.使用QQ互联进行测试时发现出现的提示信息:

        ----------------2016/2/29 (记录)

     The state does not match. You may be a victim of CSRF.

      分析得出,个人在QQ互联中的网站地址写的与默认连接不一致,保证了回调地址的正确以后,进行测试发现正常。

  

    5.php的json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案

    PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传输量。但在PHP5.3中,就得自己写个函数来实现,以下就是解决方法:

  1. /**
  2. * 对变量进行 JSON 编码
  3. * @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据
  4. * @return string 返回 value 值的 JSON 形式
  5. */
  6. function json_encode_ex($value)
  7. {
  8. if (version_compare(PHP_VERSION,'5.4.0','<'))
  9. {
  10. $str = json_encode($value);
  11. $str = preg_replace_callback(
  12. "#\\\u([0-9a-f]{4})#i",
  13. function($matchs)
  14. {
  15. return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
  16. },
  17. $str
  18. );
  19. return $str;
  20. }
  21. else
  22. {
  23. return json_encode($value, JSON_UNESCAPED_UNICODE);
  24. }
  25. }


    6.虚拟机vmware 中不能上网的一种情况

    这两天,在学些LAMP的一点知识,主要记录一些问题在此,希望给遇到相同困扰的人一点参考。---2016.5.25

windows环境下的PHP学习,算是有一点基础了,但毕竟是自学,所以自己的学些规划不够清晰,意识到必须学习Linux系统下的相关知识才行。前几天安装了VMware,并且安装了Ubuntu,CentOS6.5,Deepin三种系统,具体的安装也是参考网络上的图解,其中值得注意的几点是:

·win10环境下的VMware安转和运行时,尽量选择 管理员权限

·Linux系统的选择,各有各的优点吧,个人觉得Deepin是界面最好看的,记得设置用户名和密码

·发现升级为win10系统后,自己所装的虚拟机都不能上网了,后来在VMware->编辑->虚拟网络编辑器 中点击了左下角的“恢复默认设置”,测试发现问题解决

    

  ·多数问题,可以百度来的就自己解决,毕竟自己找错误的就是很好的学习。


    7.linux命令新发现

    今天在使用xshell软件连接Linux系统时发现,只有CentOS可以连接,同时使用putty来测试,证实其他的虚拟机无法连接,根据网上的一个提示 重启ssh服务,当然网上提示的是 "sudo service sshd start",测试发现应该是没有安装的原因,但是使用“sudo apt-get install sshd”是不成功的,可能提示错误或者系统不同的原因吧,然后发现使用 语句“sudo  apt-get install ssh”进行顺利安装,同时需要更改目录/etc/ssh/sshd_config中的信息,将PermitRootLogin 改为 true ,最后进行启动服务的命令“sudo service ssh start”,最后测试发现xshell和Putty都可以顺利连接,当然FileZilla也是没问题的。

   顺带一提,为了保证在使用FileZilla时满足文件上传下载,需要以管理员root身份登录,如果没有设置root密码,需使用命令$ sudo su 或者$ sudo passwd root 创建密码,如果要转化管理员,使用命令 su user 即可。

  

    8.附带一段进行随机数获取的代码,便于以后参考。

  1. <?php
  2. /**
  3. * 此脚本的设计用于测试数据
  4. * 获取十八组 八个字节的随机数据 并进行计算整理
  5. * 最后以字符串拼接的形式输出 注意其中的十六进制转化
  6. */
  7. $hexadecimal = '7FFFFF';
  8. $maxNum = base_convert($hexadecimal, 16, 10);
  9. echo GetRandStr(18,$maxNum);
  10. /**
  11. * @param $len 获取数字的次数
  12. * @param $tag 数字的最大范围
  13. * @return string 获取随机数的字符串
  14. *
  15. */
  16. function GetRandStr($len,$tag)
  17. {
  18. $output='';
  19. $output2='';
  20. for ($i=0; $i<$len; $i++)
  21. {
  22. $tagNum = mt_rand(0, $tag);
  23. $Num1 = sprintf("%06X",$tagNum);//进行位数的补全设置
  24. $Num2 = GetNum2($Num1,$i);
  25. $output .= '00'.$Num1;
  26. $output2.=$Num2;
  27. }
  28. return $output.$output2;
  29. }
  30. /**
  31. * @param $num1 传入的第一组数据值
  32. * @param $tag1 参考标记
  33. * @return string 返回计算后的字符串
  34. */
  35. function GetNum2($num1,$tag1){
  36. $output2='';
  37. $tagNum = base_convert($num1, 16, 10);
  38. if($tag1<8){
  39. //使用pow()内置函数进行整数的求幂运算
  40. $m1 = (5*$tagNum)/(pow(2,23)-1)*10000;
  41. }else{
  42. $m1 = (20*$tagNum)/(pow(2,23)-1)*1000;
  43. }
  44. //使用内置函数floor()取整运算
  45. $m2 = sprintf("%04X",floor($m1));
  46. $output2.=$m2;
  47. return $output2;
  48. }

    9.ThinkPHP去掉URL中的index.php 方法

    部分解决本地无法加载的链接,和虚拟域名的实现 >>参考网址

    10. 127.0.0.1和本机ip地址都无法访问

      (2017-01-19 更新)

      apache配置虚拟主机后,127.0.0.1和本机ip地址都无法访问,个人认为两种使用模式(ip访问和虚拟主机)不会兼容

    解决方法:给 Include conf/extra/httpd-vhosts.conf 前面加个# 注释配置

不过最好配置虚拟主机。

    11.防止ajax重复提交

      (2017-01-21 更新)  

    (1).参考网址 参考一 参考二 参考三(评论)

    (2).举个栗子.

//禁用或启用
function disableDelAdd(order_sn,tag) {
        $("#addNum-"+order_sn).attr('disabled',tag);
        $("#delNum-"+order_sn).attr('disabled',tag);
}
//检查商品库存 是否允许商品数目的增减
function checkGoodsNum(order_sn,tag,viewNum,buy_num,toUrl,checkUrl,goods_id) {
    var postData = {};
    postData['buy_num'] = buy_num;
    postData['goods_id'] = goods_id;
    disableDelAdd(order_sn,true);
    $.ajax({
        type:"POST",
        url: checkUrl,
        data :postData,
        dataType : "json",
        success : function(result){
            if(result.status == 1){
                //成功
                viewNum.val(parseInt(buy_num));
                updateOrderNum(order_sn,tag,toUrl);
            }else{
                //失败
                return layer.msg(result.message);
            }
            disableDelAdd(order_sn,false);
        },
        error: function(){
            disableDelAdd(order_sn,false);
        }
    });
}

 


    12.参考ajax详细写法 (ajax在微信报错

/**
 * Created by 百鬼夜行 on 2017/1/21.
 */
$(function () {
    $('.test_submitorder').click(function () {

        var pid = $("#goods_id").val();
        var spec_str = $("#carPrefixBTN").text();
        var spec_id = $("#carPrefixBTN").attr("spec_id");
        var mobile = $("#userTel").val();
        var type = $("#type").val();
        var carnumber = $("#carNUM").val();
        $.ajax({
            url: '__APP__?m=Shopping&a=ajaxSubmitorder',
            cache: false,
            async: false,
            type: 'POST',
            data: {
                'mobile': mobile,
                'carnumber': carnumber,
                'pid': pid,
                'spec_id': spec_id,
                'spec_str': spec_str,
                'type': type
            },

            beforeSend: function () {
                //触发ajax请求开始时执行
                $('#btnRecharge').text('提交订单中...');
                $('#btnRecharge').removeClass('test_submitorder');
            },
            success: function (msg) {
                if (msg.status == 1) {
                    window.location.href = ' __APP__?m=Pay&a=index' + '&oid=' + msg.data;
                }
                else {
                    alert(msg.status);
                    alert('网络繁忙,请稍后再试...');
                    $('#btnRecharge').text('立刻办理.');
                    $('#btnRecharge').addClass('test_submitorder');
                }
            }
            ,
            error: function (msg) {
                console.log(msg);
                alert('网络繁忙...');
                $('#btnRecharge').text('立刻办理.');
                $('#btnRecharge').addClass('test_submitorder');
            },
            complete: function (msg) {
                //ajax请求完成时执行
                if (msg.status == 1) {
                    $('#btnRecharge').text('立刻办理.');
                    $('#btnRecharge').addClass('test_submitorder');
                }
            }
        });
    });
});

  Ajax另一种写法

//检查当前用户是否有设置默认收货地址
function toDealWithBuyerMsg(order_sn,dealWithUrl) {
    var postData = {};
    postData['order_sn'] = order_sn;
    $.post(
        dealWithUrl,
        postData,
        function (result) {
            if(result.status == 1){
                //成功
                toPayOrder(order_sn);
            }else{
                //失败
                layer.msg('Sorry,默认地址未设置或不完整~');
                //toAddBuyerMsg(order_sn);
            }
        },"JSON");
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/270036
推荐阅读
相关标签
  

闽ICP备14008679号