问题列表 - 第13563页

在GET参数(PHP)中隐藏自动增量ID

编辑:我已经发现并发布了一个高效优雅的解决方案,可以将ID转换3141592为字符串,如vJST向后转换.它可用于PHP:

https://github.com/delight-im/PHP-IDs

提供一些背景知识,它使用Knuth的乘法散列,然后进行基本转换,以生成唯一的,可逆的,非顺序ID.

问题:

我在PHP中有动态页面,其中的内容根据给定的ID显示.id始终通过GET参数提交:page.php?id = X这会导致问题:站点访问者可以枚举id并简单地遍历所有不同的内容页面.当然,这是不可能的.

怎么能解决这个问题?

我的方法是编码链接和表单中的所有ID,以后用作GET参数.在每个页面的开头,给定的id被解码成在数据库中使用的"真实"id.这是一个好方法吗?你会选择另一种方式吗?

我方法的可能解决方案:

我会将整数id转换为基数为38的整数,并将数字替换为给定列表的字符.我会将这些字符用于编码的字符串id:

az 0-9 - _

你会使用其他角色吗?对于这些字符,我的脚本将是这样的:

function id2secure($old_number) {
    $alphabet_en = array(0=>'1', 1=>'3', 2=>'5', 3=>'7', 4=>'9', 5=>'0', 6=>'2', 7=>'4', 8=>'6', 9=>'8', 10=>'a', 11=>'c', 12=>'e', 13=>'g', 14=>'i', 15=>'k', 16=>'m', 17=>'o', 18=>'q', 19=>'s', 20=>'u', 21=>'w', 22=>'y', 23=>'b', 24=>'d', 25=>'f', 26=>'h', 27=>'j', 28=>'l', 29=>'n', 30=>'p', 31=>'r', 32=>'t', 33=>'v', 34=>'x', 35=>'z', 36=>'-', 37=>'_');
    $new_number = '';
    while ($old_number > 0) {
        $rest = $old_number%38;
        if (!isset($alphabet_en[$rest])) { return FALSE; …
Run Code Online (Sandbox Code Playgroud)

php security encryption parameters get

0
推荐指数
1
解决办法
1704
查看次数

如何在Linq to Entities查询中使用标记枚举?

我有这样的[Flags]枚举:

[Flags]
public enum Status
{
  None = 0,
  Active = 1,
  Inactive = 2,
  Unknown = 4
}
Run Code Online (Sandbox Code Playgroud)

状态枚举可能包含两个值,例如:

Status s = Status.Active | Status.Unknown;
Run Code Online (Sandbox Code Playgroud)

现在我需要创建一个linq查询(LINQ to ADO.NET Entities)并询问状态为s的记录,即Active或Unknown;

var result = from r in db.Records
             select r
             where (r.Status & (byte)s) == r.Status
Run Code Online (Sandbox Code Playgroud)

当然我得到一个错误,因为LINQ to Entities只知道在Where子句中处理原始类型.

错误是:

无法创建"闭包类型"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

有可行的方法吗?我可能有一个状态枚举,有10个可能的值,并查询5个状态.如何以优雅的方式使用Flags枚举构造查询?

谢谢.

更新

这似乎是一个Linq to Entities问题.我认为在LINQ to SQL中它可以工作(不确定,没有经过测试).

.net linq enums flags

4
推荐指数
2
解决办法
9933
查看次数

String.Format参数顺序烦恼

真的很烦人C#似乎强迫你明确命名String.Format中每个参数的索引,如果你想在某个地方添加另一个参数,你必须重新索引字符串或将新参数放在最后.

有没有办法让C#自动执行此操作?

例如(我知道这是毫无意义的小贩,这只是一个例子:)

我开始:

String.Format("{0} {1} {1} {2} {3}", a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

如果我想在开头添加一个参数,我可以执行以下操作之一:

String.Format("{4} {0} {1} {1} {2} {3}", a, b, c, d, e)
String.Format("{0} {1} {2} {2} {3} {4}", e, a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

例如,在Delphi中我可以做到相当于:

String.Format("{} {} {} {2} {} {}", e, a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

c# string formatting

7
推荐指数
2
解决办法
9700
查看次数

我应该将所有抽象类命名为AbstractFoo

确保所有抽象类的名称都以"Abstract"为前缀是一种好习惯吗?

class abstract

6
推荐指数
1
解决办法
300
查看次数

Oracle 9 - 重置序列以匹配表的状态

我有一个序列用于在oracle表中播种我的(基于Integer的)主键.

看来这个序列并不总是用于在表中插入新值.如何将序列与表中的实际值一起返回?

oracle sequence oracle9i

18
推荐指数
4
解决办法
2万
查看次数

用于asp.net开发而不是VSS的Git/SVN?

在工作中,我们使用的是ASP.net 2.0和VSS.VSS是一个野兽,我们不断遇到人们检查文件的问题,并且没有分支 - 让它变得疯狂.我知道SVN/GIT主要由开源开发人员使用,ASP.NET开发人员使用它有什么缺点吗?我一直在内部推动SVN,但我认为GIT可能也是一个很好的选择.我们的团队遍布三大洲.

svn asp.net git version-control visual-sourcesafe

3
推荐指数
2
解决办法
2678
查看次数

LISP检查列表是否对称而没有反向

任何人都有任何想法如何这样做...反向太慢,我想避免使用该功能.

基本上我希望能够在'(abba)出现或'(abcdcba)之类的情况下返回true

对于不对称的东西是假的

lisp

4
推荐指数
1
解决办法
2019
查看次数

当返回E_POINTER和E_INVALIDARG时?

COM接口方法可以返回各种HRESULT值来表示传递的无效参数值.我什么E_POINTER时候回来E_INVALIDARG

据我所知,如果一个方法在封装集合中接收索引并且它超出了界限E_INVALIDARG.如果一个方法接收到一个Interface**指针,它指的是存储一个指向新创建的对象的指针E_POINTER.

HRESULT CImpl::GetItem( long index; Interface** result )
{
    if( result == 0 ) {
        return E_POINTER;
    }
    if( index < 0 || index >= internalArray.size() ) {
        return E_INVALIDARG;
    }
    *result = CreateWrapperObject( internalArray[index] );
    return S_OK;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果它收到一个WCHAR*文件名为"in"参数的缓冲区并且这WCHAR*是空的呢?是这个E_POINTER还是E_INVALIDARG

或者一个方法接收一个指向某个结构的指针,并期望通过该指针填充结构,并且该指针为空 - 是这个E_POINTER还是E_INVALIDARG

HRESULT CImpl::SaveToFile( WCHAR* fileName )
{
    if( fileName == 0 ) { …
Run Code Online (Sandbox Code Playgroud)

windows com pointers com-interop

9
推荐指数
1
解决办法
6876
查看次数

推荐免费数据库用于.net app中的商业用途

我正在寻找一个免费/开源关系数据库,用于商业asp.net 3.5项目.有什么建议?

c# database asp.net asp.net-3.5

10
推荐指数
4
解决办法
9255
查看次数

使用c#lambda的n个数的阶乘...?

我刚开始玩lambdas和Linq表达自学.我为此采取了简单的因子问题.在一个复杂的小场景中,找到给定n个数的阶乘(无需使用递归循环).

在我试过的代码下面.但这不起作用.

public void FindFactorial(int range)
{

    var res = Enumerable.Range(1, range).Select(x => Enumerable.Range(0, x).Where(y => (y > 1)).Select(y => y * (y-1)));            
    foreach (var outt in res)
        Console.WriteLine(outt.ToString());

}
Run Code Online (Sandbox Code Playgroud)

这是我使用的程序

  • 循环数字1到n - Enumerable.Range(1,range).
  • 选择每个数字x并再次循环它们x次(而不是递归)
  • 并选择其中(y =>(y> 1))大于1的数字并将其与(y-1)相乘

我知道我搞砸了某个地方.谁能告诉我什么是错的以及任何其他可能的解决方案.

编辑:

我打算让这个线程打开一段时间......因为这是我迈向lambda的最初步骤..我发现所有的答案都非常有用且信息丰富..而且它会变得有趣而且很好学习看到不同的接近方式这个问题.

c# linq lambda

6
推荐指数
3
解决办法
5741
查看次数