我在CodeIgniter中遇到了一个非常奇怪的CSRF保护问题.我确保使用form_open来启动表单,在配置文件中将csrf_protection设置为true,并且我还确保隐藏的csrf名称和值字段与csrf cookie匹配,如下所示:http:// d .pr/3cfB.
当我提交表单时,我会收到"遇到错误.我们不允许您请求的操作." 错误,我不知道为什么.当我关闭csrf_protection时,表单工作正常.
更奇怪的是,我使用tank_auth库进行身份验证,并且还使用form_open作为登录表单.当csrf_protection打开时,我确实检查了登录表单中是否有隐藏的csrf字段,我能够提交表单并登录而没有任何问题.
关于我可以做些什么来调试这个问题的想法?
我一直试图找到一种方法来自定义带有特殊字段,自定义格式等的JSON.我已经在我的模型中创建了一个as_json和to_xml方法来制定我需要的对象.这很好用,但它很草率,因为我的一些辅助方法必须进入模型,因为我需要帮助器和模型中的格式.我也认为这是一个草率的代码,使模型失控.
我已经能够获得json.erb工作的格式,但不认为它的工作100%正确,并且回调也没有附加.任何人都可以这样做
这是我到目前为止所得到的.
api调用format.json
调用的模板是items.json.erb
<% @items.each do |item| %>
<%= { :item => { :id => item.id, :name => item.name }.to_json.html_safe %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这有效,但看起来很奇怪.有人有建议或有办法做到这一点?
顺便说一句这是为了回调工作
<%= params[:callback]+"(" if params[:callback] %>
<% @items.each do |item| %>
<%= { :item => { :id => item.id, :name => item.name }.to_json.html_safe %>
<% end %>
<%= ")" if params[:callback] %>
Run Code Online (Sandbox Code Playgroud) 要检查是什么@some_var,我正在做
if @some_var.class.to_s == 'Hash'
Run Code Online (Sandbox Code Playgroud)
我确信有更优雅的方式来检查是否@some_var是一个Hash或一个Array.
我正在使用System.Data.Sqlite访问C#中的SQLite数据库.我有一个查询必须读取表中的行.在遍历行并且在阅读器打开时,必须执行某些SQL更新.我遇到了"数据库被锁定"异常.
在SQLite的文档状态:
当进程想要从数据库文件中读取时,它遵循以下步骤:
- 打开数据库文件并获取SHARED锁.
文档进一步说明了"共享"锁定:
可以读取数据库但不写入数据库.任意数量的进程可以同时保存SHARED锁,因此可以有许多同时读取器.但是,当一个或多个SHARED锁处于活动状态时,不允许其他线程或进程写入数据库文件.
在常见问题状态:
多个进程可以同时打开同一个数据库.多个进程可以同时执行SELECT.但是,只有一个进程可以随时对数据库进行更改.
SQLite权威指南一书指出:
... 通过使用read_uncommited编译指示,连接可以选择具有读取未提交的隔离级别.如果设置为true,则连接不会对其读取的表放置读锁定.因此,另一个writer实际上可以更改表,因为read-uncommitted模式下的连接既不会阻塞也不会被任何其他连接阻塞.
我尝试将pragma设置为在SQL查询命令语句中读取未提交,如下所示:
PRAGMA read_uncommitted = 1;
SELECT Column1, Column2 FROM MyTable
Run Code Online (Sandbox Code Playgroud)
使用不同连接在同一线程上的SQL更新仍然失败,并出现"数据库已锁定"异常.然后,我尝试将隔离级别设置为在连接实例上读取未提交.同样的例外仍然没有变化.
如何在不锁定数据库的情况下使用开放数据读取器来遍历数据库中的行,以便我可以执行更新?
更新:
以下两个答案都有效.然而,我已经从使用默认回滚日志转移到现在使用预写日志,这提供了改进的数据库读写并发性.
我在Node.js中提取POST请求的响应主体时遇到问题.我期待RESPONSE:'access_token = ...'
应该很简单,不知道我应该做什么.(节点v0.4.3)
这是我的代码片段.
payload = 'client_id='+client_id + '&client_secret='+ client_secret
+ '&code='+ code
var options = {
host: 'github.com',
path: '/login/oauth/access_token?',
method: 'POST'
};
var access_req = https.request(options, function(response){
response.on('error', function(err){
console.log("Error: " + err);
});
// response.body is undefined
console.log(response.statusCode);
});
access_req.write(payload);
access_req.end();
console.log("Sent the payload " + payload + "\n");
res.send("(Hopefully) Posted access exchange to github");
Run Code Online (Sandbox Code Playgroud) 例如:
struct A { void m() { } };
void stream_print() {
void(A::*p)(void) = &A::m;
std::cerr << p << std::endl;
}
void printf_print() {
void(A::*p)(void) = &A::m;
fprintf(stderr, "%p", p);
}
Run Code Online (Sandbox Code Playgroud)
stream_print()函数总是打印"1",这显然不是我想要的.printf_print无法编译,因为p无法转换为void*.
我需要的是一个方法指针的唯一标识符,我可以存储在容器中.我知道这听起来不错,但我正在开发一种可以从中受益的单元测试小玩具.我不担心方法的重载,我知道如何获得指向特定重载的指针.
我正在使用启用了C++ 0x的g ++ 4.4.3.
如果您有任何疑问,请告诉我.
我只是想知道是否有任何方法从另一个字符串中删除字符串?像这样的东西:
class String
def remove(s)
self[s.length, self.length - s.length]
end
end
Run Code Online (Sandbox Code Playgroud) 由于其丑陋的语法和命名空间污染,许多人认为Haskell的记录语法是一种优雅语言的疣.另一方面,它通常比基于位置的替代方案更有用.
而不是像这样的声明:
data Foo = Foo {
fooID :: Int,
fooName :: String
} deriving (Show)
Run Code Online (Sandbox Code Playgroud)
在我看来,这些方面的东西会更有吸引力:
data Foo = Foo id :: Int
name :: String
deriving (Show)
Run Code Online (Sandbox Code Playgroud)
我确信必须有一个很好的理由让我失踪,但为什么采用类似C语言的记录语法采用更简洁的基于布局的方法?
其次,管道中是否有任何东西可以解决命名空间问题,所以我们可以编写id foo而不是fooID foo在Haskell的未来版本中编写?(除了目前可用的基于longwinded类型的变通办法.)
我们目前正在使用VincentVega(现已进入Tarantino)作为我们的数据库CI.我们正在使用CruiseControl.Net作为我们的Web应用程序(C#使用TFS).
VincentVega的表现相对较好,因为它非常明确,并且同样处理创建和更新(同时保留现有数据)这两种情况.我正在考虑升级到塔伦蒂诺,但我想知道是否有人可能会提出一些我应该考虑的替代方案?不幸的是,像SQL比较"自动"生成增量脚本的工具是不可能的,因为我们的数据库已经高度标准化了500多个表.
谢谢
Eric Tarasoff
我有一个非常大的表,有两个INT列,默认为null.这是一个问题,因为它们是INT字段,如果它们最初设置为0,在许多情况下会有所帮助.
所以我的问题是,有没有一种方法可以更新和增加(+1)这些字段,而它们是这样的(默认值为null)?BTW ..到目前为止我没有运气,似乎增量仅在默认值= 0时有效
..or是我唯一的选择,将默认值从null更改为无