我发现要在视图周围添加边框,我可以使用以下代码作为视图的背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<stroke android:width="1dp" android:color="#999999" />
<padding android:left="1dp" android:top="1dp" android:right="1dp"
android:bottom="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
但是如果我想要一个仅用于底部或顶部或右侧或左侧的边框怎么办?我尝试了以下方法:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke android:color="#000"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
但是当我把它设置为背景时
android:background="@drawable/my_border"
Run Code Online (Sandbox Code Playgroud)
它在视图的中间绘制线条,所以我有一个穿透效果.有什么方法可以在底部或顶部绘制这条线或使其垂直?
在WPF中,我们有一个形状的相对坐标,所以我可以根据需要偏移线.Android上有类似的东西吗?如果我们没有边框,至少我们应该有好的线形绘图工具,所以我们可以根据需要绘制边框.Android开发者是否计划对此采取行动?
我正在使用Laravel 5(具体来说,"laravel/framework"版本是"v5.0.27"),其中session driver ='file'.
我正在开发Windows 7 64位机器.
我注意到有时候(每周一次左右)我会意外地随机退出.有时甚至在我登录后立即发生这种情况.我已将日志消息添加到我的auth逻辑代码中,但未触发日志代码.Laravel表现得好像已经完全丢失了会话文件.
另一个更严重的问题是,有时在调试会话之后(使用xdebug和Netbeans),Laravel也开始丢失其他文件 - .env设置,一些调试条JS文件等.错误日志包含以下消息:
[2015-07-08 13:05:31] local.ERROR: exception 'ErrorException' with message 'mcrypt_encrypt(): Key of size 7 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported' in D:\myproject\vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.php:81
[2015-07-08 13:05:31] local.ERROR: exception 'PDOException' with message 'SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'forge'' in D:\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:47
Run Code Online (Sandbox Code Playgroud)
这清楚地表明Laravel没有读取.env文件,所以它使用默认设置:
'database' => env('DB_DATABASE', 'forge'),
'key' => env('APP_KEY', 'somekey'),
Run Code Online (Sandbox Code Playgroud)
丢失的文件很少发生,可能每月一次左右,并且总是发生在调试会话之后.我总是不得不重新启动Apache以使其再次运行.
为了对系统进行压力测试并可靠地重现问题,我在Angular控制器中使用了一个快速入侵:
setInterval(function(){
$scope.getGridPagedDataAsync();
}, 500);
Run Code Online (Sandbox Code Playgroud)
这只是Angular到Laravel的基本数据请求.
就是这样 - 现在我可以在3分钟或更短的时间内重现会话失败和.env失败.
我之前在相同的PC上使用相同的Apache + PHP开发了AJAX密集型Web应用程序,但没有Laravel,没有.env,我之前没有注意到这些问题. …
我使用ASP.NET MVC 4 Web应用程序作为一些WCF服务的前端.所有用户登录/注销和会话控制都在后端完成.MVC应用程序应该只存储具有会话ID的单个cookie.我的客户端不允许使用表单身份验证,所有内容都必须自定义.
我在web.config中设置了以下内容:
<system.web>
...
<authentication mode="None" />
</system.web>
<system.webServer>
<modules>
...
<remove name="FormsAuthentication" />
...
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我还有一个全局过滤器:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// Force all actions to request auth. Only actions marked with [AllowAnonymous] will be allowed.
filters.Add(new MyAuthorizeAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
在Global.asax中调用
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Run Code Online (Sandbox Code Playgroud)
我用[AllowAnonymous]标记了每个不需要授权的控制器和操作.
现在我必须实现MyAuthorizeAttribute.我尝试了一些教程,但没有一个完全符合我的场景.
基本上,我必须为每个操作处理以下方案:
据我所知,我需要覆盖AuthorizeCore(检查我的cookie以查看会话是否存在且仍然有效)和HandleUnauthorizedRequest(将用户重定向到Home/Index而不是默认的Login页面).
对于重定向,我试过:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.Result = new RedirectResult("/Home/Index/NeedsLogin");
}
Run Code Online (Sandbox Code Playgroud)
这似乎处理第二个罚款的情况(我不确定那个基本呼叫,但它是否需要?).
对于第一种情况,我需要实现AuthorizeCore.我不确定,如何正确地做到这一点.我已经看到AuthorizeAttribute有一些代码用于处理缓存情况,也许还有更多隐藏的功能,我不想打破它.
对于第三种情况,我不确定MyAuthorizeAttribute是否能够处理它.AuthorizeAttribute可以捕获Action内部发生的异常,或者我必须在我的全局错误处理程序中处理SecurityFault.SessionExpired情况吗?
今天我在检查storage/framework/sessions由Laravel 5创建的文件夹中的会话文件时发现了一些令人不安的事情.
这是发生了什么:
storage/framework/sessions仍在那里,浏览器cookie还活着.storage/framework/sessions已删除,并且存在新的会话文件.它导致安全问题,因为现在用户B可以访问用户A的数据.
在通过Laravel源代码进行调试时,我发现在注销/登录过程中永远不会清除会话存储.只在Illuminate\Auth\Guard::clearUserDataFromStorage()方法中删除了登录凭据,但是所有的会话存储属性仍然存在,然后在$kernel->terminate($request, $response);调用时,这反过来导致Illuminate\Session\Middleware\StartSession::terminate()调用Store::save(),盲目地保存$this->attributes到新会话,忽略它现在属于另一个的事实用户.
从一方面看,这似乎是合乎逻辑的--Laravel对我的数据没有任何假设,我是否希望它与认证一起过期.但是,如果将某些敏感数据附加到身份验证对象并与之一起过期,则将其记录在某处可能会很棒.
这意味着我作为程序员负责在新的(或相同的)用户登录时完全清除当前会话中的所有敏感数据.
注销时清除将不可靠,因为用户可能永远不会单击"注销"链接,而是等待会话"过期",这对于Laravel仍然无法清除会话.
还有一点要记住:我不应该过早清除会话 - 必须存在AntiForgery令牌,否则登录表单将始终失败.
我找到了一个论坛主题,也试图解决一些类似的问题:
http://laravel.io/forum/04-27-2014-how-to-expire-session-data
我对此感到困惑:
我今天又做了另一件事并意识到问题所在:Session :: flush()不会删除应用创建的会话数据,例如购物车详细信息
如果这是真的,那么完全摆脱会话的唯一方法就是使用PHP本机session_unset(),session_destroy()但我不想这样做 - 如果可能的话,我宁愿找一个更干净的Laravel-ish解决方案.
当身份验证过期或用户注销时,如何告诉Laravel我希望将旧会话数据与用户身份验证数据一起删除?
我不想在Netbeans Action Items列表中看到第三方库的错误和警告,所以我创建了一个过滤器,如下所示:
过滤器已打开,但我仍然可以从node_modules文件夹中看到许多项目.我究竟做错了什么?如何配置过滤器以忽略来自node_modules和vendor文件夹的所有内容?
我在本地计算机上有两个Laravel 5.2应用程序(我们称之为A和B),它们都在我本地Apache 2.4开发服务器上的两个不同的虚拟主机上配置.
这两个应用程序有时通过GuzzleHttp相互调用.
有一次我想使用加密,我开始从Laravel的Encrypter获得"mac is invalid"异常.
在调查问题时,我发现当应用A调用应用B时,应用B突然从应用A获取加密密钥(app.key)!这会导致加密中断,因为应用B上的值使用应用的B加密密钥进行加密.
在调试时,我发现Dotenv库有一些逻辑来保存现有变量(如果已设置).我发现$ _ENV和$ _SERVER都没有泄漏变量,但getenv()有它们!
我有点困惑,因为PHP putenv说:
环境变量仅在当前请求的持续时间内存在.
似乎,如果在当前请求期间我通过GuzzleHttp发出另一个请求,Dotenv在A中使用的变量putenv()突然变得可以在应用B中使用,这是由GuzzleHttp请求的!
我知道在生产服务器上这不会是一个问题,因为将使用配置缓存而不是Dotenv,并且很可能两个应用程序都将在不同的Apache服务器上运行,但这种行为正在破坏我的开发过程.
如何配置Laravel或GuzzleHttp或Apache或PHP以防止putenv()从应用程序A泄漏到应用程序B?
我对WPF和XAML有点新,现在就学习.
我找到了一些以前开发人员的快速代码:
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border Name="buttonBorder" Background="{TemplateBinding Background}">
<Border.Effect>
<DropShadowEffect Opacity="0.0" />
</Border.Effect>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="buttonBorder" Property="Effect">
<Setter.Value>
<DropShadowEffect Opacity="0.8" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsMouseCaptured" Value="true">
<Setter TargetName="buttonBorder" Property="Effect">
<Setter.Value>
<DropShadowEffect Opacity="0.8" Direction="135"
ShadowDepth="3" BlurRadius="1" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="buttonBorder" Property="Background">
<Setter.Value>
<ImageBrush ImageSource="{Binding Path=Tag, RelativeSource={RelativeSource TemplatedParent}}" />
</Setter.Value>
</Setter>
<Setter TargetName="buttonBorder" Property="Effect">
<Setter.Value>
<DropShadowEffect Opacity="0.0"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
基本上它只是一个具有基本鼠标悬停效果的按钮的模板,并且禁用状态的图像绑定到Tag(似乎是一个丑陋的解决方案).
我想创建一个非常相似的自定义按钮,但我想暴露两个自定义属性:NormalImage和DisabledImage.这些属性应该是字符串而不是Uri.我想使用路径来映像"apply.png"而不是"pack:// application:,,,/Resources/Apply.png".我想,要拥有这样的自定义属性,我需要一个具有依赖属性的UserControl?
基本上,我想使用按钮如下:
<MyImageButton NormalImage="apply.png" DisabledImage="apply_disabled.png"/>
Run Code Online (Sandbox Code Playgroud)
也许NormalImage/DisabledImage稍后会被绑定,但这不太可能. …
今天我遇到了超时问题.
我有以下配置用于创建SessionFactory:
<property name="adonet.batch_size">50</property>
<property name="command_timeout">600</property>
Run Code Online (Sandbox Code Playgroud)
我不将它存储在web.config中,而是存储在手动传递给配置的XML文件中:
configuration.Configure(cfgFile)
Run Code Online (Sandbox Code Playgroud)
因此,我可以拥有多个具有独立配置的会话工厂(每个数据库).
但是,command_timeout只有当NHibernate不使用批次时,这似乎才有效.如果SQL命令是批处理的,那么对于一些大批量我得到:
NHibernate.Exceptions.GenericADOException: could not execute batch command.
[SQL: SQL not available] --->
System.Data.SqlClient.SqlException: Timeout expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索解决方案时,我发现了一篇文章,解释了为什么会发生这种情况:http: //ronaldrosiernet.azurewebsites.net/Blog/2013/04/20/timeout_in_nhibernate_batched_sessions
问题的原因是,对于SQL批处理,NHibernate使用Cfg.Environment.CommandTimeout而不是command_timeout在创建会话时传递给配置.
我找到了一种在创建配置时实现变通方法的方法:
if (configuration.Properties.ContainsKey(NHibernate.Cfg.Environment.CommandTimeout))
NHibernate.Cfg.Environment.Properties[NHibernate.Cfg.Environment.CommandTimeout] =
configuration.Properties[NHibernate.Cfg.Environment.CommandTimeout];
Run Code Online (Sandbox Code Playgroud)
现在我的同事们说暂停现在似乎已经解决了.
但令我困惑的是以下主题:https://forum.hibernate.org/viewtopic.php?f = 25& t = 983105
其中说:
NHibernate.Cfg.Environment.Properties属性返回全局属性的副本,因此您无法对其进行修改.
如果NHibernate.Cfg.Environment.Properties是一个只读副本,那么为什么我的解决方法似乎工作正常?它是稳定的还是这个修复程序不可靠并且在其他一些情况下可能会中断?
此外,我在NHibernate JIRA中发现了一个相关问题:https: //nhibernate.jira.com/browse/NH-2153
如果他们说他们在v3.1.0中修复了command_timeout的问题,那么为什么我仍然需要在NHibernate v3.3.2中使用我的解决方法.?
有没有人对此有任何见解?
最近我一直在尝试下载Visual Studio 2012 Express,但我没找到它.有一天,链接在那里,第二天所有这些链接都被2013版本所取代.甚至谷歌和微软自己在他们的下载网站上搜索都会找到2012版本,但是当我打开链接时,我发现它们现在已经是2013年了.
为什么微软这样做?我发现他们删除了2012年的链接很奇怪,特别是因为2010年的链接仍然存在.
亲自看看:http: //www.microsoft.com/visualstudio/eng/downloads
我现在从哪里获得Visual Studio 2012 Express?我们在TFS中有很多项目,我们还不想转换到2013年.
我知道有各种语言的国名列表可单独提供,但我想列出一个国家名单,其中每个国家都被命名为该国居民如何称呼它.我的意思是列表如下:
United States of America
??????
Deutschland
Run Code Online (Sandbox Code Playgroud)
我认为网站访问者选择他们熟悉的国家名称会很方便,而且我不必为服务器上的每种语言存储单独的国家/地区列表 - 我总是可以只显示这个常用列表.
互联网上有这样的清单吗?或者也许我可以用某种方式从PHP中获取它?