我在这里有一点问题,如果我使用'或'一切都返回false,继承我的代码:
internal class FileReplacementMiddleware : OwinMiddleware
{
public FileReplacementMiddleware(OwinMiddleware next) : base(next) {}
public override async Task Invoke(IOwinContext context)
{
MemoryStream memStream = null;
Stream httpStream = null;
if (ShouldAmendResponse(context))
{
memStream = new MemoryStream();
httpStream = context.Response.Body;
context.Response.Body = memStream;
}
await Next.Invoke(context);
if (memStream != null)
{
var content = await ReadStreamAsync(memStream);
if (context.Response.StatusCode == 200)
{
content = AmendContent(context, content);
}
var contentBytes = Encoding.UTF8.GetBytes(content);
context.Response.Body = httpStream;
context.Response.ETag = null;
context.Response.ContentLength = contentBytes.Length;
await context.Response.WriteAsync(contentBytes, context.Request.CallCancelled);
}
}
private static async Task<string> ReadStreamAsync(MemoryStream stream)
{
stream.Seek(0, SeekOrigin.Begin);
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
return await reader.ReadToEndAsync();
}
}
private bool ShouldAmendResponse(IOwinContext context)
{
// logic
}
private string AmendContent(IOwinContext context, string content)
{
// logic
}
}
如果我只是使用!=&#39; name&#39;它运作正常,无论是谁或&#39;它没有
答案 0 :(得分:2)
这不起作用,因为这不是逻辑表达式的工作方式。
您必须将每个字符串与$_SESSION["login"]
进行比较:
if($_SESSION["login"] != 'joaomonteiro'
and $_SESSION["login"] != 'm1n6u3x'
and $_SESSION["login"] != 'jorgesaado17' ){
修改:如果应使用or
运算符代替and
,则只需稍加更改:
if(!($_SESSION["login"] == 'joaomonteiro'
or $_SESSION["login"] == 'm1n6u3x'
or $_SESSION["login"] == 'jorgesaado17' ){
答案 1 :(得分:1)
您必须将每个逻辑比较与字符串进行比较。
if($_SESSION["login"] != 'joaomonteiro' && $_SESSION["login"] != 'm1n6u3x' && $_SESSION["login"] != 'jorgesaado17') {
// code
}
答案 2 :(得分:0)
那是因为你基本上是在说:
if($_SESSION['login'] != 'joaomonteiro' or true or true) {
}
如果你这样做
var_dump((boolean)"m1n6u3x");
var_dump((boolean)"jorgesaado17");
它们都将返回true。
我建议你阅读关于布尔值的文件