所以我在线框图中有一个网络应用程序,但是我遇到了一个需要技术解决方案才能巩固这个模型的问题.那是:
图#1用户创建新的'text-field'元素(具有最大宽度的div.)然后用户开始输入所述元素,直到...
图#2元素到达它的最大宽度,文本下降到一个新的行,并创建一个'新的'背景图像(以另一个div的形式)(它的不透明度和位置动画效果)以容纳更大的元素sze.
这是预期功能的大致轮廓(目前给出,我不知道如何使用一个行为类似于具有最大宽度的div的文本字段)但我很好奇如何创建事件处理程序第二步 ; 我考虑过检查每个'keydown'事件,但这似乎效率低下......
有没有人有任何建议或想法来解决这样的问题?谢谢!
我将逐步介绍有问题的流程......
奇怪的是,我只是html5Mode = true
在Webkit- firefox按需工作时才观察到这一点......
...
首先,我的server.coffee看起来像这样:
app.get '/partials/:partial', routes.partials
app.get '/api/test', api.test
app.get '*', routes.index
Run Code Online (Sandbox Code Playgroud)
基本上,所有请求都加载索引(引导Angular),视图/部分处理程序除外,以及使用原始JSON响应的测试api路由.
...
(我使用ui-router模块来管理嵌套视图和UI状态;它使用的$urlRouterProvider
,与Angular非常相似$routeProvider
)
其次,我的app.coffee看起来像这样:
app = angular.module('app', ['ui-router'])
.config([
'$stateProvider'
'$locationProvider'
'$urlRouterProvider'
($stateProvider, $locationProvider, $urlRouterProvider)->
$urlRouterProvider
.when('/api/test', [
'$window'
'$location'
($window, $location)->
$window.location.href = '/api/test'
]) …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个具有用户群的应用程序,而我正在确保登录安全.我是编程(和PHP)的新手,但到目前为止我的努力已经指向使用Crypt()
和Blowfish哈希盐.
在我走得更远之前,让我指出我此时对phpass不感兴趣.
在crypt()
文档中,用户最近发布了以下内容:
<?php
$salt = substr(str_replace('+', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 0, 22);
?>
Run Code Online (Sandbox Code Playgroud)
它适用于mt_getrandmax()== 2147483647的系统.
创建的salt长度为128位,填充为132位,然后以22 base64字符表示.(CRYPT_BLOWFISH只使用128位的盐,即使22个base64字符有132位.如果检查CRYPT_BLOWFISH输入和输出,你可以看到它忽略输入的最后四位,并在输出时将它们设置为零.)
注意,mt_rand()返回的四个32位双字的高位总是为零(因为mt_getrandmax == 2 ^ 31),所以128位中只有124位是伪随机的.我发现我的申请可以接受.
我测试了我的服务器,确实mt_getrandmax()返回2147483647.我尝试了解文档以了解上面的代码到底是做什么的 - pack()
代码N4是针对32位字符串(大端字节顺序??)重复4次...我假设是为什么有4个mt_rand()
论点.
我不明白的是为什么他替换+
用.
和22个的base64字符的目的(不,我完全理解什么是BASE64.)
建议我研究openssl_random_pseudo_bytes()
我的随机盐生成,因为我之前看到的方法仅限于自己1234567890abcdefghijklmnopqrstuvwxyz
.
据说5.3.4之前有一个错误导致openssl_random_pseudo_bytes()
运行缓慢,偶尔导致超时错误.我不确定我是否应该尝试使用openssl_random_pseudo_bytes()
和Crypt()
类似上述方法使用mt_rand()
和pack()
.
我试图更多地了解所有这些元素是如何工作的,以及它们在概念上做了什么 - 而不是仅仅使用一个而不理解它来实现我的目标; 我正在努力学习:P
有人可以帮助我理解这里工作的不同元素,或者至少将我引导到一个知识库,在那里我可以阅读它吗?我认为最常见的组件是理解不同的格式/术语(base64,ascii,hexdec,bit,byte等),但最后,如何实现与我的密码一起使用的相当安全的盐.
我遇到了浏览器缓存(显然很常见)的问题,我的安全页面可通过后退按钮访问(用户注销后).
这是我的logout.php
<?php
// 1. Find the session
session_start();
// 2. Unset all the session variables
$_SESSION = array();
// 3. Destroy the session cookie
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 4. Destroy the session
session_destroy();
redirect_to('index.php?logout=1');
?>
Run Code Online (Sandbox Code Playgroud)
这成功地在IE7,IE8,Chrome和Firefox上注销用户 - 但在Safari中,我可以按后退按钮(在注销后立即)并仍然可以看到安全内容.如果我刷新安全页面,它会将我引导到登录屏幕(应该如此).
我尝试过使用:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Run Code Online (Sandbox Code Playgroud)
......但它没有效果.有人可以提供任何建议吗?我发现这篇关于浏览器缓存的文章,但我还没有在其中找到答案......虽然我确实找到了:
<?php
Header("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 3;
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) …
Run Code Online (Sandbox Code Playgroud) 我一直很喜欢Lynda.com的Jquery Essential Training,我注意到教练在开始时使用:
Fig. 1
$("document").ready(function(){
fun stuff goes here
});
Run Code Online (Sandbox Code Playgroud)
然而,在他开始使用的某个地方:
Fig. 2
$(function(){
fun stuff goes here
});
Run Code Online (Sandbox Code Playgroud)
从他说话的方式来看,听起来好像是完全同义的(一些固有的jquery简写?)但据我所知,它从未被明确触及过.
我相信有人可以为我快速解决这个问题.我发现了这一点,但我认为这个问题略有不同 - 我理解在文档就绪上调用函数的概念与全局可用函数的概念; (这些功能也有名字.)
教师使用幻象函数(我认为这是一个没有名字的函数的术语),当输入图2时,他说"所以这将是文档就绪......"
我构建了一个类似于 Twitter 登录的表单,即。每个都有一个<span>
标签<input>
...然后在按键时,标签将其字体大小设置为 0。这是一个很酷的效果。
我注意到的问题是,如果您使用表单自动填充程序,则只有触发初始按键事件的表单才能正确为其标签设置动画 - 其他标签不会正确地设置动画,从而与输入的值重叠。
我的问题是......如何弥补这一点?当表单自动填充器输入输入值时会触发哪些事件,更具体地说,我将如何通过 jQuery 使用它们?
。。。
表格样本如下:
<div class="name">
<input class="name" name="name" type='text' value="<?php echo $name; ?>">
<span>Full Name</span>
</div>
Run Code Online (Sandbox Code Playgroud)
。。。
下面的 jQuery 示例:
$(function(){
// On document ready, check form fields
$(':input').each(function() {
if($(this).val() === "") {
$(this).next('span').animate({fontSize:16},'fast');
}
});
// On form focus, adjust colors
$(':input').focus(function() {
$(this).addClass('focus');
$(this).next('span').addClass('focus');
});
// On keypress, remove label
$(':input').keypress(function() {
$(this).next('span').animate({fontSize:0},'fast',function(){
$(this).hide();
});
});
// On form blur, restore colors and label …
Run Code Online (Sandbox Code Playgroud) 我一直在关注PHP的crypt函数和Stackoverflow上的一些问题,而我正试图找出salted和hashed密码.
我在PHP社区页面上找到了这个:
<?php
function md5crypt($password){
// create a salt that ensures crypt creates an md5 hash
$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
.'abcdefghijklmnopqrstuvwxyz0123456789+/';
$salt='$1$';
for($i=0; $i<9; $i++){
$salt.=$base64_alphabet[rand(0,63)];
}
// return the crypt md5 password
return crypt($password,$salt.'$');
}
?>
Run Code Online (Sandbox Code Playgroud)
这样的事情与以下相比如何:
<?php
// Slightly modified example from PHP community page
$password = trim(mysql_prep($_POST['password']));
// Get the hash, letting the salt be automatically generated
$hashed_password = crypt($password);
?>
Run Code Online (Sandbox Code Playgroud)
以下是另一个问题的摘录:
但是,PHP crypt()函数可以使用各种不同的哈希值来计算哈希值.当您使用"$ 1 $"为盐添加前缀时,您将获得带有MD5的哈希值.当你用$ 2 $加前缀时,你会得到一个带有河豚的地穴,这样更安全.
"$ 1 $"以输出为前缀,以便验证散列.如果没有包含,则无法从存储的哈希中知道应该使用哪种算法!这些信息必须存储在其他地方.为了节省您的麻烦,PHP在哈希输出中包含了算法.
我的头脑有点关于哈希,加密和盐...但真正让我感到困惑的部分是,我如何比较一个用户输入password
的 …
我正在学习 PHP,并且我已经开始使用类——下面可能是最基本的对象,哈哈。
<?php
class Person {
var $first_name;
var $last_name;
var $arm_count = 2;
var $leg_count = 2;
function say_hello() {
echo "Hello from inside the class " . get_class($this) .".<br />";
}
function full_name() {
return $this->first_name . " " . $this->last_name;
}
}
$person = new Person();
echo $person->arm_count . "<br />";
$person->first_name = 'Lucy';
$person->last_name = 'Ricardo';
echo $person->full_name() . "<br />";
$vars = get_class_vars('Person');
foreach($vars as $var => $value) {
echo "{$var}: {$value}<br />";
}
echo …
Run Code Online (Sandbox Code Playgroud) 我正在关注使用PHP创建你的第一个微小的MVC Boilerplate教程,据我所知 - 我的代码与Jeff的代码相同......但我收到了这个错误:
解析错误:解析错误, 在第8行的D:\ wamp\www\MVC_test\application\load.php中期待`T_FUNCTION'
load.php
<?php
class Load {
function view( $file_name, $data = NULL )
{
if( is_array($data) ) { extract($data); }
}
include 'views/' . $file_name;
}
?>
Run Code Online (Sandbox Code Playgroud)
我尝试了一些不同的东西,但我不明白第8行有什么问题.
在容器对象中,我创建了一个类Factory
,它负责组装2种不同类型的数组:一个包含多个foo
对象,另一个包含多个bar
对象.
我打算把它们称为:
$this->foos = Factory::assemble_foos()
.
$this->bars = Factory::assemble_bars()
.
该Factory
会也理论上被称为更新/删除显式声明的对象/属性,因为这样的:
例如. Factory::destroy_bar( $bar_id )
例如. Factory::update_foo( $foo_id, $attr, $val )
但我对OOP和PHP相当新,并对我的方法感到好奇 - 我意识到这个Factory
类纯粹是管理的,而且它从来没有打算实例化(或者至少从未实例化多次).
对于这种方法,有一个专门的静态方法,也许是一些静态属性,是否存在"不良实践"?我应该重新处理我的代码,以便我的容器对象实例化一个Factory
,并使我的方法实例方法?
谢谢