问题列表 - 第21220页

使用PHP限制对登录用户的内容访问

我有一个LAMP设置,我只是希望能够保护网页上的内容(图像,CSS,视频等),以便只有登录的用户才能访问它.

我意识到我可以使用.htaccess轻松完成这项工作.但是我不想使用身份验证弹出窗口,我希望能够使用会话并且还能够注销.

我正在使用php来完成使用mysql进行身份验证并创建会话.这非常有效.但仍然可以访问图像,CSS,JavaScript等.

仅当存在有效的php会话时,如何才允许访问内容?

我遇到过使用mod_rewrite将文件转发到php文件(比如auth.php?file = ...)并在那里进行会话检查.对于已经检查过的页面中的每个图像,检查会话似乎效率低下.这似乎是一个黑客,我一直认为有一个更清洁的方式来做到这一点.

是否有像mod_session_cookie这样的apache的mod可以检查我的会话数据库中是否存在具有会话密钥的cookie,如果是,则为目录设置Allow all?

或者,是否可以使用mod_auth_mysql,但也能够使用PHP表单而不是身份验证弹出窗口使用会话和登录?

编辑:

这是我解决问题的方法:

在我的apache配置文件(不是.htaccess)中,我添加了:

RewriteLock /var/www/lib/rewrite.lock

<VirtualHost>
    #...
    RewriteEngine on
    RewriteMap sessionValid prg:/var/www/lib/allow.php

    <Directory /var/www/client/*>
            RewriteEngine on

            RewriteCond %{HTTP_COOKIE} !client-cookie=([^;]+)
            RewriteRule .* - [L,R=403]

            RewriteCond %{HTTP_COOKIE} client-cookie=([^;]+)
            RewriteCond ${sessionValid:%1} !valid
            RewriteRule .* - [L,R=403]
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

脚本allow.php:

#!/usr/bin/php5
<?php
set_time_limit(0);

echo ""; 
$stdin = fopen("php://stdin","r");
$db = mysql_connect(...);  
mysql_select_db(..., $db);
$querypre = "SELECT ID FROM Sessions WHERE ID='";

while (1) {
  $line = trim(fgets($stdin));

  $query = $querypre.mysql_real_escape_string($line)."'";
  $result = mysql_query($query);

  if …
Run Code Online (Sandbox Code Playgroud)

php mysql apache authentication session

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

从iframe内部访问iframe名称

我虽然这很简单,但我找不到答案.我需要知道如何从iframe中访问iframe的名称.我正在尝试这样的事情,但它不起作用.

<iframe name="thename">
  <script type="text/javascript">
    alert(parent.name);
  </script>
</iframe>
Run Code Online (Sandbox Code Playgroud)

html javascript iframe

27
推荐指数
3
解决办法
7万
查看次数

在Ruby中,如何在不重复代码的情况下使用其默认参数或指定参数调用方法?

说我有一个ruby方法:

def blah(foo=17)
   ...
end
Run Code Online (Sandbox Code Playgroud)

在代码中我想用一个特定的参数"blah(a)"来调用blah,或者使用它的默认参数"blah()"调用blah.如果没有指定方法名两次,有没有办法做到这一点?我试图避免:

if a.nil?
  blah()
else
  blah(a)
end
Run Code Online (Sandbox Code Playgroud)

因为它使代码看起来比它复杂.我能想出的最好(没有测试)是:

args=[]
args << a unless a.nil?
a.send :blah, args
Run Code Online (Sandbox Code Playgroud)

ruby parameters arguments default

3
推荐指数
1
解决办法
210
查看次数

是否可以通过编程方式设置MasterType?

一个页面可以有一个属性MasterType,使Page.Master被强类型:

<%@ MasterType VirtualPath="~/Site.master" %>
Run Code Online (Sandbox Code Playgroud)

如果我的所有页面都继承了继承System.Web.UI.Page自己的特定类,this.Master那么我是否可以访问其中的属性,以便我可以调用母版页的方法?

.net c# asp.net master-pages

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

Visual Studio Designer不断尝试初始化我的Collection属性

我已经创建了一个UserControl CatalogBrowser,它具有一个属性ListedFamilies,可以公开控件中当前列出的Family对象.这是该物业的代码.

public List<Family> ListedFamilies {
     get {
         List<Family> returnList = new List<Family>();
         foreach (Object obj in this.familyObjectListView.Objects) {
             returnList.Add((Family)obj);
         }
         return returnList;
     }
     set {
         this.familyObjectListView.ClearObjects();
         this.familyObjectListView.Objects = value;
     }
 }
Run Code Online (Sandbox Code Playgroud)

现在在我使用此控件的表单中,我一直遇到Visual Studio在Form的设计器文件中添加以下行的问题.

this.catalogBrowserControl1.ListedFamilies = ((System.Collections.Generic.List<SOMLib.Family>)(resources.GetObject("catalogBrowserControl1.ListedFamilies")));
Run Code Online (Sandbox Code Playgroud)

这导致我的程序崩溃,因为我没有(或想要)我的项目中的资源来初始化此集合属性的值.

如何防止Visual Studio自动尝试初始化此属性?

.net c# visual-studio winforms

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

引用Java中匿名内部类中的封闭类的非final字段

在Java中,我知道可以这样做:

public class Greeter {
    public void greetEventually() {
        final String greeting = "Hello!";
        Job j = new Job() {
            public void run() {
                System.out.println(greeting);
            }
        };
        j.schedule();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将Job在将来的某个时刻执行匿名.这是有效的,因为允许匿名类引用封闭范围中的最终变量.

我不确定的是以下情况:

public class Greeter {
    private String greeting;

    // ... Other methods that might mutate greeting ...

    public void greetEventually() {
        Job j = new Job() {
            public void run() {
                System.out.println(greeting);
            }
        };
        j.schedule();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的匿名Job是指封闭类的非final字段.作业运行时,我是否会看到greeting创建作业时的字段值,或者执行作业时的值?我想我知道答案,但我认为这是一个有趣的问题,起初它让我和几个同事再次猜测自己几分钟.

java closures anonymous-types anonymous-class

3
推荐指数
1
解决办法
443
查看次数

在服务器端为servlet JSP MVC网站运行定期任务

我使用servlet和JSP开发了一个Web应用程序.我本身并没有使用任何框架,而是使用我自己的自制MVC框架.我使用MySQL作为后端.

我想做以下事情:

  1. 每小时清理数据库中的一些数据
  2. 在某个XML文件中每15分钟生成并存储有关数据的统计信息

问题是:目前我的所有代码都是从客户端收到的请求运行的.

如何在服务器端运行定期任务?

我现在的一个解决方案是在控制器的init函数中创建一个线程.还有其他选择吗?

java servlets scheduled-tasks

19
推荐指数
1
解决办法
2万
查看次数

使用JQuery检查值是否在选择列表中

我怎样才能使用JQuery检查一个值是否属于下拉列表?

jquery-selectors drop-down-menu

108
推荐指数
5
解决办法
15万
查看次数

在MediaElement中更改源(SILVERLIGHT)

我想将我的MediaElent上的歌曲从track1.mp3更改为track2.mp3.以下是代码:

MyMediaElement.Stop();
Uri u = new Uri("track2.mp3", UriKind.Relative);
MyMediaElement.Source=u;
MyMediaElement.Play();
Run Code Online (Sandbox Code Playgroud)

MediaElement更改源但不会启动.这段代码可能有什么问题?

silverlight mediaelement playback

3
推荐指数
1
解决办法
6682
查看次数

使用IEnumerable而不使用foreach循环

我必须在这里找到一些简单的东西.

请使用以下代码:

public IEnumerable<int> getInt(){
  for(int i = 0; i < 10; i++){
   yield return i;
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以这样称呼:

foreach (int j in obj.getInt()){
  //do something with j
}
Run Code Online (Sandbox Code Playgroud)

如何在没有foreach循环的情况下使用getInt方法:

IEnumerable<int> iter = obj.getInt();
// do something with iter ??
Run Code Online (Sandbox Code Playgroud)

谢谢.

EDITS

对于那些想知道为什么我想要这个的人.我正在迭代两件事:

IEnumerator<int> iter = obj.getInt().GetEnumerator();
foreach(object x in xs){
  if (x.someCondition) continue;
  iter.MoveNext();
  int n = iter.current();
  x.someProp = n;
  etc...
}
Run Code Online (Sandbox Code Playgroud)

c# ienumerable yield-return

35
推荐指数
3
解决办法
5万
查看次数