谁一开始就是大神?

PHP 第42页

PHP

如何使用curl来模拟登陆[2.0]

Newhappy阅读(101)

csrf怎么处理。

好吧,表示不想手动签到啦。

机智的少年。
但签到的前提是登录,而登录的前提是session。
但对于API来说并不存在session。所以除了无良的舰长给你开个API去直接签到。
就没有其他方便的方法啦!
如果必须php的话,尝试使用php调用Selenium看看吧,以前用python调用抓微信啥的挺好使的。
csrf 设置为false 就可以了
找到模拟签到的方案了么,搞不定吧,除非有接口,推送参数
https://note.youdao.com/share/?id=3fc8701bab2605437e8e4f1f2406cfb9&type=note#/
自己研究一下午的成果 如果有问题请联系我删除…

Yii::$app->session是一个对象,为什么可以直接通过key像数组一样取到值[2.0]

Tinaelephant阅读(103)

$session = Yii::$app->session;
var_dump($session); // dump出来是一个对象,但也dump不出来test的值
var_dump($session['test']); // 为什么可以直接通过key像数组一样取到值
var_dump($session->get('test')); // 这种方式能理解

建議你看一下 Class : yii\web\session
class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Countable
他有 implements ArrayAccess extension 這可以把物件當作陣列操作, 兩種均可使用
这个是通过魔术方法__set,__get实现的,实际执行的是类似Yii::$app->get('session');

对YII2的登录验证是在不是很清楚,我总结了几个问题,希望大神帮忙回答一下[2.0]

momolovely阅读(91)

登录方式是不是一共有三种?一种是账号密码,一种是cookie,一种是token。
账号密码登录我能理解,但是cookie登录,YII2具体是怎么实现的呢?
我大概步骤是能了解,就是把弄个认证类,然后认证类里就写getAuthKey()validateAuthKey($authKey),然后就能实现自动登录?那cookie的时间怎么设置的呀?。。。。。。我很懵逼呀,求大神帮忙,给我一个连接,我自己去看也成,我实在找不到了。最好是连认证,授权一起给我讲一下,或者给我丢个连接,我自己看,文档我看了N遍了,过程我能理解,就是不知道具体实现。

先说自动登录,cookie在哪里设置的,允许自动登录必须得启用enableAutoLogin,设置为true
然后看登录,在你的LoginFrom中的login方法有这么一行代码:
也是真正执行登录操作的代码,他实际上调用的是\yii\web\User的login方法,这个类的实际路径在:盘符/项目名/vendor/yiisoft/yii2/web/User.php
首先执行登录之前的操作,然后,关键是$this->switchIdentity($identity, $duration)这个方法:
在$this->sendIdentityCookie($identity, $duration);这里把cookie设置进去
Yii::$app->getResponse()->getCookies()->add($cookie); 这里设置cookie
到这里,应该解决了cookie的设置的问题了吧。
然后说说自动登录的实现
在SiteController中的actionLogin()方法,他判断这个用户是不是登录用户,如果不是,则返回主页或者说登录页
还是走到\yii\web\User这个类,调用了getIsGuest()方法,getIsGuest()方法调用getIdentity($autoRenew = true)方法
是否开启自动登录($this->enableSession && $autoRenew),是,那么执行renewAuthStatus()方法:
启用自动登录$this->enableAutoLogin为true,然后判断是否是访客$this->getIsGuest(),如果是,则执行登录,从cookie登录$this->loginByCookie();这就是cookie登录的具体实现
$identity = $class::findIdentity($id);//根据cookie保存的记录id在数据库中找,这里调用的是在配置文件中main.php配置的
common\models\User这个类的findIdentity($id)方法
if ($identity->validateAuthKey($authKey)) {} 则调用 common\models\User这个类的validateAuthKey($authKey)方法,实际上就是判断这个记录id的auth_key这个数据库的值是否跟保存到cookie中的一样,如果一样,返回true。
目的是,所以,如果管理员要修改一个帐号的密码,实际上出了修改他的密码password_hash之外,还需要修改auth_key,否则他如果以前登录过。cookie有值,一样可以正常登录。这点很重要
然后就没啥好说的拉,就是正常的登录流程拉,个人建议,好好利用ide的debug功能,跟踪代码绝对杠杠的
完整的具体实现在高级版脚手架那块。
按照你所理解的登录,是两种。token是验证 API 授权才需要用到的。
你可以参考这个连接http://www.yiichina.com/tutorial/965,它拥有无比完整的代码。然后把登录流程看一遍(在vendor目录下的代码可以不用看),再结合权威指南的安全-》认证那块。你上述的所有问题必定都可以在这两块得到解决。
common/models/LoginForm.php里面

yii2数据库问题[2.0]

BellaEagle阅读(91)

Uncaught Error: Call to a member function getDb() on null 如果使用common里面的数据库配置 则报错
我只能设置vendor/yiisoft/yii2/db/ActiveQuery.php 中的$db;

public static function getDb()
你配置有问题吧,数据库前缀考虑了没,
config/db,配置有错?
方便的话希望能给出更多的信息
否则我们从一开始就只能凭借经验来解答了,结果就是配置有问题。。。
代码贴出来啊
应该是数据库的配置问题!

hasmany搭配limit分页失败问题;[2.0]

CindyStone阅读(93)

hasmany查出的结果集,使用limit分页的话这个分页针对临时表导致分页失败,怎么解!大神有遇到过吗???

我也遇到这个问题。关注一下!
请把代码贴出来,大神们才看得到
$list = BEssay::find()->joinWith(“comments”)->distinct()->limit(’10’)->all();

Yii2通过AR模型获取制字段后更新保存失败,但是又没有错误[2.0]

Elliefrog阅读(99)

如下所示代码:

// 获取user的所有字段
$model = User::findOne(Yii::$app->getUser()->getIdentity()->getId());
$model->head_image = UploadedFile::getInstance($model, 'head_image');
$file = Yii::$app->params['uploadImagePath'] . Yii::$app->security->generateRandomString(64) .  '.' . $model->head_image->extension;
// 保存文件
$model->head_image->saveAs($file);
$model->head_image = $file;
if ($model->update()){
     return '头像更新成功!';
}
return '文件保存成功!' . Json::encode($model->errors);      

这时$model->update()成功,数据库数据更新成功。

但是当 _$model = User::find()->select('username,head_image')->where(['userid' => Yii::$app->getUser()->getIdentity()->getId()])->one();_ 这样获取数据时,_$model->update()_失败,且数据库数据没有更新。

我又使用_$model = User::find()->select('*')->where(['userid' => Yii::$app->getUser()->getIdentity()->getId()])->one();_获取数据时,_$model->update()_也是成功的,且数据库数据更新成功。

我又将两种获取得到的数据模型打印出来做了比较,除了数据条数不同内容都是一样的。

劳烦朋友指教。

select(‘id,username,headimage’)试试
刚开始学,学习了!

DatePicker日期控件转换格式问题[2.0]

fationhope阅读(101)

QQ截图20161120183127.png
使用DatePicker控件,新增一条记录的格式调好了,数据库中是以时间戳形式存储的时间,在修改一条记录的时候,如上图所示,哪位朋友知道在哪里可以转化格式,成为yyyy-mm-dd的形式,谢谢。

model里写的getDate,setDate方法,方法里做转换,前台model使用date
选择时间框,绑定的是dateTime
http://www.bootcss.com/p/bootstrap-datetimepicker/
http://www.runoob.com/jqueryui/example-datepicker.html
做程序,文档都不去看。。。。。。。。。。。。。。。
其实就是text框内容,后台php、前端js都可以做到

php函数array_diff()为什么对比的结果不对?[2.0]

momopony阅读(94)

我现在做修改文章操作,用到 array_diff() 函数,对比提交的新数据和数据库里面的旧数据不一样的地方,结果有一个字段不一样却没对比出来,望求解,比如以下两个数组

$new=["abc"=>"abc","c_isrecommend"=>"1", "c_singer"=>"1"];
$old=["abc"=>"abc","c_isrecommend"=>"0", "c_singer"=>"1"];
print_r(array_diff($new,$old));

有差别,但对比的结果是空数组

Array ( )

不知道怎么回事,有知道为什么这样的大神么?求解啊,如果这个函数不准确,有没有别的方法能对比两个数组的差别并筛选出来的方法呢?望解答

array_diff 是返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。
你$new的c_isrecommend=>1 的值在$old的已经存在了 和$old的c_singer=>1相等
你把$new改成 $new = array(‘abc’=>’abc’,’c_isrecommend’=>’2′,’c_singer’=>’1′);就行了
楼主何不试试这个呢:array_diff_assoc
函数只检查了 数组中的一维

Yii项目不需要build就可以部署,如何通过加号进行部署?[1.0]

SlyJames阅读(105)

用Yii1 进行的项目开发

每次部署都会因为缓存问题访问到的不是已更改后的page
每次部署完都需要**手动清除缓存**来访问更改后的页面

综上,相同给文件加版本号来解决问题

所以,如添加版本号呢?

1、可以设置一个全局变量保存版本信息,在相应的链接地址后面加上 &v=1.0.1
2、可以写个脚本在部署时自动清除缓存
docker大法好,每次更新重启容器后runtime和asset自动清理。

登录

找回密码

注册