2012-02-22 7 views
20

¿Por qué deberíamos evitar usar variables de clase @@ en rieles? ¿Hay alguna laguna de seguridad con eso? Por favor, responda como soy nuevo con los rieles. y estoy usando mucho la variable de instancia @variable_name. Intenté una vez @@variable_name.¿Por qué deberíamos evitar usar variables de clase @@ en rieles?

tengo más que es variable de clase, variable de clase es compartible entre el objeto

Pero realmente me gustaría saber ¿Por qué debemos evitar el uso de variables de clase @@ en los carriles?

+0

Eso suena como variables 'estáticas' en Java. No hay razón para no usarlo, solo tenga en cuenta que no pertenece a su instancia y podría cambiar de forma asíncrona. – Chloe

Respuesta

41

Simplemente porque no son seguros para subprocesos. Muchos rieles = servidores con capacidad tienen múltiples hilos. Eso significa que puede haber múltiples instancias en ejecución de su aplicación en cualquier momento dado y cualquier solicitud de uno de sus usuarios será asignada arbitrariamente a una de ellas. Las variables de clase no se comparten entre procesos, por lo que existe la posibilidad de que la variable de clase sea diferente en una solicitud posterior.

Incluso si deliberadamente logra ejecutar su aplicación en un solo servidor de hilos, no hay garantía de que su aplicación no se reiniciará entre solicitudes, perdiendo su variable de clase.

Si desea una funcionalidad similar a la que proporcionan las variables de clase, le recomiendo encarecidamente que busque en tiendas de valores clave como Memcached o Redis.

+0

No se comparte nada entre procesos, no solo @@ vars. Supongo que no deberíamos usar @vars también por la misma razón, ¿o sí? –

+7

@Victor Bueno, '@ variables' son variables de instancia y son consistentes ** dentro de ** una solicitud porque una solicitud genera una nueva instancia de un controlador. Simplemente no espere encontrarlos en la próxima solicitud. – edgerunner

+0

¿Le importará al infractor explicar por qué? – edgerunner

Cuestiones relacionadas